Doctrine2 sf2Vigo

  • 7,983 views
Uploaded on

Doctrine2 para usuarios Symfony2. Jornadas Symfony Vigo 2011.

Doctrine2 para usuarios Symfony2. Jornadas Symfony Vigo 2011.

More in: Technology , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
7,983
On Slideshare
0
From Embeds
0
Number of Embeds
5

Actions

Shares
Downloads
150
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. O modelo.Doctrine2Nacho Martín
  • 2. El modelo en MVC
  • 3. Smart User Interface <html> <head> <title>Mi primera web dinámica</title> </head> <body> <blink><?php $visitas = consulta_SQL(visitas); echo $visitas; guarda_SQL($visitas + 1); ?></blink> </body> </html>
  • 4. VistaControlador Modelo
  • 5. Vista ControladorModelo
  • 6. “Responsable de representar conceptos sobrela situación del dominio y sus reglas.Los detalles de almacenamiento se deleganen la infraestructura. “ Eric Evans, Domain Driven Design
  • 7. “Responsable de representar conceptos sobrela situación del dominio y sus reglas.Los detalles de almacenamiento se deleganen la infraestructura.Esta capa es el corazón del software. “ Eric Evans, Domain Driven Design
  • 8. “ “Symfony2 va sobre proporcionar herramientaspara el Controlador y la Vista, pero no parael Modelo. Fabien Potencier
  • 9. Doctrine
  • 10. Puente entre el modelorelacional y los objetos Doctrine ORMAPI de la capa deabstracción de la BD Doctrine DBALAPI interfaz para distintosdrivers de BD PDO MS SQL Server, Firebird/Interbase, IBM, INFORMIX, MySQL, Oracle, ODBC y DB2, PostgreSQL, SQLite
  • 11. DBAL
  • 12. # app/config/config.ymldoctrine: dbal: driver: pdo_mysql dbname: Symfony2 user: root password: null charset: UTF8
  • 13. $conn = $this->get(database_connection);$users = $conn->fetchAll(SELECT * FROM users);
  • 14. <?php$conn = $this->get(database_connection);$queryBuilder = $conn->createQueryBuilder();$users = $queryBuilder ->select(u.id) ->addSelect(p.id) ->from(users, u) ->leftJoin(u, phonenumbers, u.id = p.user_id) ->setFirstResult(30) ->setMaxResults(25) ->execute();
  • 15. ORM
  • 16. ActiveRecord (Doctrine 1) Postidtítuloautortagssave()delete()...
  • 17. ActiveRecord DataMapper (Doctrine 1) (Doctrine 2) Post Postid idtítulo títuloautor autortags tagssave()delete()...
  • 18. Record
  • 19. Entidad
  • 20. class Post{ private $id; private $titulo; private $autor; private $tags;}
  • 21. class Post{ private $id; private $titulo; private $autor; private $tags;}
  • 22. /*** @ORMTable(name="post")* @ORMEntity*/class Post{
  • 23. /*** @ORMId* @ORMColumn(type="integer")* @ORMGeneratedValue(strategy="IDENTITY")*/private $id;/** * @ORMColumn(type="string") */private $titulo;
  • 24. stringinteger date float timesmallint datetime bigint textboolean objectdecimal array
  • 25. /** * @ORMManyToOne(targetEntity="User", * inversedBy="posts", cascade={"remove"}) * @ORMJoinColumn(name="user_id", referencedColumnName="id") */private $autor;
  • 26. /** * @ORMManyToMany(targetEntity="Tag", inversedBy="Posts") * @ORMJoinTable(name="post_tag", * joinColumns={@ORMJoinColumn(name="tag_id", * referencedColumnName="id")}, * inverseJoinColumns={@ORMJoinColumn(name="post_id", * referencedColumnName="id")} * ) */private $tags;
  • 27. php app/console doctrine:generate:entities AcmeStoreBundle
  • 28. $user = new ForumUser();$user->setName(Nacho);$name = $user->getName();$comment = new Comment();$user->addComment($comment);
  • 29. Entity Manager
  • 30. $em = $this->getDoctrine()->getEntityManager();$dql = "SELECT t FROM AcmeMiBundleEntityTask t";$dql .= " WHERE t.proyecto = :proyecto";$dql .= " AND t.posicion > :minpos";$dql .= "ORDER BY t.prioridad"$query = $em->createQuery($dql);$query->setParameters(array( project => $project, minpos => 10,));$tareas = $query->getResult();
  • 31. $query = $em->createQuery(SELECT u, a FROM ForumUser u JOIN u.avatar a);$users = $query->getResult(); //Arrayecho $users[0]->getAvatar()->getFilename();
  • 32. $qb = $em->createQueryBuilder() ->where(p.precio > :precio) ->setParameter(precio, 19.99) ->orderBy(p.precio, ASC) ->getQuery();$productos = $query->getResult();
  • 33. Query#getResult()Query#getSingleResult() BDQuery#getOneOrNullResult()Query#getArrayResult()Query#getScalarResult()Query#getSingleScalarResult() Post Tag1 Tag2
  • 34. Repositorio
  • 35. “ “Proporciona la ilusión de tener una colecciónen memoria de todos los objetos de un tipo.Permite acceso mediante una interfaz común. Eric Evans, Domain Driven Design
  • 36. $producto = $repository->find($id);$producto = $repository->findOneByNombre(Thermomix);$productos = $repository->findAll();$productos = $repository->findByPrecio(19.99);$productos = $repository->createQueryBuilder(p)->...
  • 37. <?php/** * ABBundleEntity * * @ORMTable(name="ponencia") * @ORMEntity(repositoryClass="ABBundleEntityPonenciaRepository") */class Ponencia{
  • 38. DDD
  • 39. Migraciones BD Definición
  • 40. Migraciones BD Comparación Definición
  • 41. Migraciones BD Comparación Definición Diff
  • 42. Migraciones BD Comparación Definición Diff
  • 43. Migraciones BD BD Comparación Definición Diff
  • 44. php app/console doctrine:migrations:diffphp app/console doctrine:migrations:migrate
  • 45. La familia Doctrine
  • 46. MongoDB ODM
  • 47. CouchDB ODM
  • 48. PHPCR ODM
  • 49. Doctrine Search
  • 50. Vida más allá
  • 51. ?Qué hay del rendimiento?
  • 52. Patrón Polish Rider
  • 53. Patrón Balkan Partisan
  • 54. ¿Preguntas?
  • 55. Gracias nitram.ohcan@gmail.com @nacmartin limenius.com