📜 ⬆️ ⬇️

Here it is, Doctrine 2.0 (Dated for the release of Doctrine 2.0 Alpha 3)

image
Congratulations, colleagues! 3 days ago the third alpha version of the most powerful ORM framework for PHP was released today: Doctrine.

And this news is, by and large, noteworthy because in Doctrine 2.0 there have been very significant changes compared to previous versions. Immediately, I will note that these goodies will require nothing less from us - support for php 5.3.

Doctrine 2.0 official teaser looks like this:
  1. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  2. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  3. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  4. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  5. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  6. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  7. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  8. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  9. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  10. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  11. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  12. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  13. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  14. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  15. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
  16. <?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }


So, what we should pay attention to here:
')
1) We set the meta data for class mapping using DocBlock comments (XML meppig and YAML mapping have not gone away)

2) We do not inherit our CmsArticle class from Doctrine embedded classes.

3.) Class properties are not required to be declared public, they can be private or protected. Doctrine does not require you to have getters and setters for each property. You are completely free in how you will design your classes.

Friends, I think it's great!

I dare to assume that reading DocBlock comments is implemented using Reflection (there is a getDocComment method).
Quite an interesting use of Reflection.
By the way, even more actively and more elegantly (IMHO) is used in the Recess php framework . I stumbled upon it and was amazed, I saw there exactly what I wanted to do in my own bicycle. Thing definitely deserves attention.

Performance:
Doctrine 2.0 on php5.3 eats 31% less memory and runs 17% faster than Doctrine 1.0 in PHP 5.2.8
(information from the preliminary tests in the developers blog)

What's new in Doctrine 2.0 Alpha 3:
The most important thing from my point of view is the functionality for converting schemes from Doctrine 1.0 to 2.0.
As well as more than 60 fixes, code refactoring, work on drivers for mapping and export, as the developers say, the code starts to become stable.

What should we expect:
December 11, 2009 will be another alpha release, and on January 8, the first beta will be released.

References:
Doctrine PHP ORM lives here
Here is the documentation for version 2.0:
Developer blog posts with tag 2.0

Friends, I hope you were interested and you learned something new for yourself! (I personally liked the use of DocBlock comments) I look forward to an active discussion!

Source: https://habr.com/ru/post/75310/


All Articles