Doctrine2 sf2Vigo

8,433 views

Published on

Doctrine2 para usuarios Symfony2. Jornadas Symfony Vigo 2011.

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
8,433
On SlideShare
0
From Embeds
0
Number of Embeds
5,589
Actions
Shares
0
Downloads
152
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Doctrine2 sf2Vigo

  1. 1. O modelo.Doctrine2Nacho Martín
  2. 2. El modelo en MVC
  3. 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. 4. VistaControlador Modelo
  5. 5. Vista ControladorModelo
  6. 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. 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. 8. “ “Symfony2 va sobre proporcionar herramientaspara el Controlador y la Vista, pero no parael Modelo. Fabien Potencier
  9. 9. Doctrine
  10. 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. 11. DBAL
  12. 12. # app/config/config.ymldoctrine: dbal: driver: pdo_mysql dbname: Symfony2 user: root password: null charset: UTF8
  13. 13. $conn = $this->get(database_connection);$users = $conn->fetchAll(SELECT * FROM users);
  14. 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. 15. ORM
  16. 16. ActiveRecord (Doctrine 1) Postidtítuloautortagssave()delete()...
  17. 17. ActiveRecord DataMapper (Doctrine 1) (Doctrine 2) Post Postid idtítulo títuloautor autortags tagssave()delete()...
  18. 18. Record
  19. 19. Entidad
  20. 20. class Post{ private $id; private $titulo; private $autor; private $tags;}
  21. 21. class Post{ private $id; private $titulo; private $autor; private $tags;}
  22. 22. /*** @ORMTable(name="post")* @ORMEntity*/class Post{
  23. 23. /*** @ORMId* @ORMColumn(type="integer")* @ORMGeneratedValue(strategy="IDENTITY")*/private $id;/** * @ORMColumn(type="string") */private $titulo;
  24. 24. stringinteger date float timesmallint datetime bigint textboolean objectdecimal array
  25. 25. /** * @ORMManyToOne(targetEntity="User", * inversedBy="posts", cascade={"remove"}) * @ORMJoinColumn(name="user_id", referencedColumnName="id") */private $autor;
  26. 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. 27. php app/console doctrine:generate:entities AcmeStoreBundle
  28. 28. $user = new ForumUser();$user->setName(Nacho);$name = $user->getName();$comment = new Comment();$user->addComment($comment);
  29. 29. Entity Manager
  30. 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. 31. $query = $em->createQuery(SELECT u, a FROM ForumUser u JOIN u.avatar a);$users = $query->getResult(); //Arrayecho $users[0]->getAvatar()->getFilename();
  32. 32. $qb = $em->createQueryBuilder() ->where(p.precio > :precio) ->setParameter(precio, 19.99) ->orderBy(p.precio, ASC) ->getQuery();$productos = $query->getResult();
  33. 33. Query#getResult()Query#getSingleResult() BDQuery#getOneOrNullResult()Query#getArrayResult()Query#getScalarResult()Query#getSingleScalarResult() Post Tag1 Tag2
  34. 34. Repositorio
  35. 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. 36. $producto = $repository->find($id);$producto = $repository->findOneByNombre(Thermomix);$productos = $repository->findAll();$productos = $repository->findByPrecio(19.99);$productos = $repository->createQueryBuilder(p)->...
  37. 37. <?php/** * ABBundleEntity * * @ORMTable(name="ponencia") * @ORMEntity(repositoryClass="ABBundleEntityPonenciaRepository") */class Ponencia{
  38. 38. DDD
  39. 39. Migraciones BD Definición
  40. 40. Migraciones BD Comparación Definición
  41. 41. Migraciones BD Comparación Definición Diff
  42. 42. Migraciones BD Comparación Definición Diff
  43. 43. Migraciones BD BD Comparación Definición Diff
  44. 44. php app/console doctrine:migrations:diffphp app/console doctrine:migrations:migrate
  45. 45. La familia Doctrine
  46. 46. MongoDB ODM
  47. 47. CouchDB ODM
  48. 48. PHPCR ODM
  49. 49. Doctrine Search
  50. 50. Vida más allá
  51. 51. ?Qué hay del rendimiento?
  52. 52. Patrón Polish Rider
  53. 53. Patrón Balkan Partisan
  54. 54. ¿Preguntas?
  55. 55. Gracias nitram.ohcan@gmail.com @nacmartin limenius.com

×