diff --git a/2007/10/09/new-website.html b/2007/10/09/new-website.html index 5d42926a052e..3437a6079517 100644 --- a/2007/10/09/new-website.html +++ b/2007/10/09/new-website.html @@ -222,9 +222,9 @@
- Posted on
- Posted on
Doctrine has been downloaded a total of 4,807,933,458 times!
+Doctrine has been downloaded a total of 4,811,497,951 times!
The installation chapter has moved to 95d31969725a91915e491a5303c4b8b2364d3a83.
+The installation chapter has moved to 224a13a5d9e15b391d0c0accb146167140ed2df9.
The |
The same way you build a normal Query, you build a QueryBuilder
diff --git a/projects/doctrine-orm/en/2.11/metas.php b/projects/doctrine-orm/en/2.11/metas.php
index 9f12f7d3c8cb..7f00cc1cd96d 100644
Binary files a/projects/doctrine-orm/en/2.11/metas.php and b/projects/doctrine-orm/en/2.11/metas.php differ
diff --git a/projects/doctrine-orm/en/2.11/reference/installation.html b/projects/doctrine-orm/en/2.11/reference/installation.html
index 6b0fb7c8244e..8295a6472402 100644
--- a/projects/doctrine-orm/en/2.11/reference/installation.html
+++ b/projects/doctrine-orm/en/2.11/reference/installation.html
@@ -331,7 +331,7 @@
The installation chapter has moved to 030d5041b88bcf19eabadb25c2288d04350b2475.
+The installation chapter has moved to e06eec824e043063be58203e8a89b2095703e7d8.
The installation chapter has moved to d36252fa989151991b21c67cfb0a0ca32faf4c86.
+The installation chapter has moved to 1dd212fafe99f0320ddce57134e4219e1187dc2b.
The installation chapter has moved to 2db15b25b6661cfdef0be5eeb672288d8fc7c0fc.
+The installation chapter has moved to 4a0ee4cfa3fa6a330f128f81401cd3cac85ff1a8.
The installation chapter has moved to a810665ca3bc3b1b29842bdafd762203b89ad707.
+The installation chapter has moved to f61381bcaa5aeaf6ed0e3d9178cc1e077ed30c1f.
The installation chapter has moved to c4f9052899adff634f09b238b368f43549f681e8.
+The installation chapter has moved to 5048b0000f4db20e047a7c1c9bdd20e68e48de96.
The |
The same way you build a normal Query, you build a QueryBuilder
diff --git a/projects/doctrine-orm/en/2.7/metas.php b/projects/doctrine-orm/en/2.7/metas.php
index f8d32bb56888..99f4ffd01be8 100644
Binary files a/projects/doctrine-orm/en/2.7/metas.php and b/projects/doctrine-orm/en/2.7/metas.php differ
diff --git a/projects/doctrine-orm/en/2.7/reference/installation.html b/projects/doctrine-orm/en/2.7/reference/installation.html
index 07b7ba7f2de3..77fdbcca00b2 100644
--- a/projects/doctrine-orm/en/2.7/reference/installation.html
+++ b/projects/doctrine-orm/en/2.7/reference/installation.html
@@ -331,7 +331,7 @@
The installation chapter has moved to f247e46473cac56044ae7da6927a24331cba763e.
+The installation chapter has moved to d0d904413cb889a6aab8850b3d4ab46334ae7608.
The |
The same way you build a normal Query, you build a QueryBuilder
diff --git a/projects/doctrine-orm/en/2.8/metas.php b/projects/doctrine-orm/en/2.8/metas.php
index b60a73a34384..63d971828d73 100644
Binary files a/projects/doctrine-orm/en/2.8/metas.php and b/projects/doctrine-orm/en/2.8/metas.php differ
diff --git a/projects/doctrine-orm/en/2.8/reference/installation.html b/projects/doctrine-orm/en/2.8/reference/installation.html
index a75c38680d39..0a508e7f5f5c 100644
--- a/projects/doctrine-orm/en/2.8/reference/installation.html
+++ b/projects/doctrine-orm/en/2.8/reference/installation.html
@@ -331,7 +331,7 @@
The installation chapter has moved to af77e8dc33511f5124ea82a43d356a338c6c7ed3.
+The installation chapter has moved to f2ac4a9791317b7b04360a1a8bffd5bad9c56f93.
The |
The same way you build a normal Query, you build a QueryBuilder
diff --git a/projects/doctrine-orm/en/2.9/metas.php b/projects/doctrine-orm/en/2.9/metas.php
index 643d18677a1d..a379d640486f 100644
Binary files a/projects/doctrine-orm/en/2.9/metas.php and b/projects/doctrine-orm/en/2.9/metas.php differ
diff --git a/projects/doctrine-orm/en/2.9/reference/installation.html b/projects/doctrine-orm/en/2.9/reference/installation.html
index ba9137bd1762..ea8b94a1a9fb 100644
--- a/projects/doctrine-orm/en/2.9/reference/installation.html
+++ b/projects/doctrine-orm/en/2.9/reference/installation.html
@@ -331,7 +331,7 @@
The installation chapter has moved to fd0634a22c9f87647bf823e636f6a32ed95541a1.
+The installation chapter has moved to 7302caba49ee821e969b42a09bbdd9c8428b1aca.
The |
The same way you build a normal Query, you build a QueryBuilder
diff --git a/projects/doctrine-orm/en/latest/metas.php b/projects/doctrine-orm/en/latest/metas.php
index e5b5c1670e88..03dc847845c6 100644
Binary files a/projects/doctrine-orm/en/latest/metas.php and b/projects/doctrine-orm/en/latest/metas.php differ
diff --git a/projects/doctrine-persistence/en/1.0/metas.php b/projects/doctrine-persistence/en/1.0/metas.php
index 8cf784680482..585452529892 100644
Binary files a/projects/doctrine-persistence/en/1.0/metas.php and b/projects/doctrine-persistence/en/1.0/metas.php differ
diff --git a/projects/doctrine-persistence/en/1.1/metas.php b/projects/doctrine-persistence/en/1.1/metas.php
index 5e3d4b5457f1..23039d03d65f 100644
Binary files a/projects/doctrine-persistence/en/1.1/metas.php and b/projects/doctrine-persistence/en/1.1/metas.php differ
diff --git a/projects/doctrine-persistence/en/1.2/metas.php b/projects/doctrine-persistence/en/1.2/metas.php
index 5e3d4b5457f1..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/1.2/metas.php and b/projects/doctrine-persistence/en/1.2/metas.php differ
diff --git a/projects/doctrine-persistence/en/1.3/metas.php b/projects/doctrine-persistence/en/1.3/metas.php
index 5e3d4b5457f1..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/1.3/metas.php and b/projects/doctrine-persistence/en/1.3/metas.php differ
diff --git a/projects/doctrine-persistence/en/1.4/metas.php b/projects/doctrine-persistence/en/1.4/metas.php
index 5e3d4b5457f1..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/1.4/metas.php and b/projects/doctrine-persistence/en/1.4/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.0/metas.php b/projects/doctrine-persistence/en/2.0/metas.php
index 5e3d4b5457f1..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.0/metas.php and b/projects/doctrine-persistence/en/2.0/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.1/metas.php b/projects/doctrine-persistence/en/2.1/metas.php
index 5e3d4b5457f1..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.1/metas.php and b/projects/doctrine-persistence/en/2.1/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.2/metas.php b/projects/doctrine-persistence/en/2.2/metas.php
index e2c1191d9595..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.2/metas.php and b/projects/doctrine-persistence/en/2.2/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.3/metas.php b/projects/doctrine-persistence/en/2.3/metas.php
index e2c1191d9595..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.3/metas.php and b/projects/doctrine-persistence/en/2.3/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.4/metas.php b/projects/doctrine-persistence/en/2.4/metas.php
index e2c1191d9595..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.4/metas.php and b/projects/doctrine-persistence/en/2.4/metas.php differ
diff --git a/projects/doctrine-persistence/en/2.5/metas.php b/projects/doctrine-persistence/en/2.5/metas.php
index e2c1191d9595..cb22df886e6a 100644
Binary files a/projects/doctrine-persistence/en/2.5/metas.php and b/projects/doctrine-persistence/en/2.5/metas.php differ
diff --git a/projects/doctrine-persistence/en/3.0/metas.php b/projects/doctrine-persistence/en/3.0/metas.php
index eced1581e096..41b9fcb5a1cb 100644
Binary files a/projects/doctrine-persistence/en/3.0/metas.php and b/projects/doctrine-persistence/en/3.0/metas.php differ
diff --git a/projects/doctrine-persistence/en/3.1/metas.php b/projects/doctrine-persistence/en/3.1/metas.php
index eced1581e096..41b9fcb5a1cb 100644
Binary files a/projects/doctrine-persistence/en/3.1/metas.php and b/projects/doctrine-persistence/en/3.1/metas.php differ
diff --git a/projects/doctrine-persistence/en/3.2/metas.php b/projects/doctrine-persistence/en/3.2/metas.php
index eced1581e096..41b9fcb5a1cb 100644
Binary files a/projects/doctrine-persistence/en/3.2/metas.php and b/projects/doctrine-persistence/en/3.2/metas.php differ
diff --git a/projects/doctrine-persistence/en/latest/metas.php b/projects/doctrine-persistence/en/latest/metas.php
index eced1581e096..41b9fcb5a1cb 100644
Binary files a/projects/doctrine-persistence/en/latest/metas.php and b/projects/doctrine-persistence/en/latest/metas.php differ
diff --git a/projects/doctrine-phpcr-odm/en/1.7/metas.php b/projects/doctrine-phpcr-odm/en/1.7/metas.php
index 79f6a897f8bf..3f57ee0d9e22 100644
Binary files a/projects/doctrine-phpcr-odm/en/1.7/metas.php and b/projects/doctrine-phpcr-odm/en/1.7/metas.php differ
diff --git a/projects/doctrine-phpcr-odm/en/1.8/metas.php b/projects/doctrine-phpcr-odm/en/1.8/metas.php
index 9b3fade997e5..9964cd35440c 100644
Binary files a/projects/doctrine-phpcr-odm/en/1.8/metas.php and b/projects/doctrine-phpcr-odm/en/1.8/metas.php differ
diff --git a/projects/doctrine-phpcr-odm/en/1.x/metas.php b/projects/doctrine-phpcr-odm/en/1.x/metas.php
index fa1718e83bf8..ffbba203b196 100644
Binary files a/projects/doctrine-phpcr-odm/en/1.x/metas.php and b/projects/doctrine-phpcr-odm/en/1.x/metas.php differ
diff --git a/projects/doctrine-phpcr-odm/en/2.0/metas.php b/projects/doctrine-phpcr-odm/en/2.0/metas.php
index 84a6e0f54ee6..6765f42fc6cf 100644
Binary files a/projects/doctrine-phpcr-odm/en/2.0/metas.php and b/projects/doctrine-phpcr-odm/en/2.0/metas.php differ
diff --git a/projects/doctrine-phpcr-odm/en/latest/metas.php b/projects/doctrine-phpcr-odm/en/latest/metas.php
index e1cd03fb4e78..089962e859b3 100644
Binary files a/projects/doctrine-phpcr-odm/en/latest/metas.php and b/projects/doctrine-phpcr-odm/en/latest/metas.php differ
diff --git a/projects/doctrine-reflection/en/1.0/metas.php b/projects/doctrine-reflection/en/1.0/metas.php
index 9731a5361ab3..b9d76bf2e1e1 100644
Binary files a/projects/doctrine-reflection/en/1.0/metas.php and b/projects/doctrine-reflection/en/1.0/metas.php differ
diff --git a/projects/doctrine-reflection/en/1.1/metas.php b/projects/doctrine-reflection/en/1.1/metas.php
index 9731a5361ab3..b9d76bf2e1e1 100644
Binary files a/projects/doctrine-reflection/en/1.1/metas.php and b/projects/doctrine-reflection/en/1.1/metas.php differ
diff --git a/projects/doctrine-reflection/en/1.2/metas.php b/projects/doctrine-reflection/en/1.2/metas.php
index 9731a5361ab3..b9d76bf2e1e1 100644
Binary files a/projects/doctrine-reflection/en/1.2/metas.php and b/projects/doctrine-reflection/en/1.2/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.0/metas.php b/projects/doctrine-rst-parser/en/0.0/metas.php
index 530f7f1af830..539f84434497 100644
Binary files a/projects/doctrine-rst-parser/en/0.0/metas.php and b/projects/doctrine-rst-parser/en/0.0/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.1/metas.php b/projects/doctrine-rst-parser/en/0.1/metas.php
index 530f7f1af830..539f84434497 100644
Binary files a/projects/doctrine-rst-parser/en/0.1/metas.php and b/projects/doctrine-rst-parser/en/0.1/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.2/metas.php b/projects/doctrine-rst-parser/en/0.2/metas.php
index 530f7f1af830..539f84434497 100644
Binary files a/projects/doctrine-rst-parser/en/0.2/metas.php and b/projects/doctrine-rst-parser/en/0.2/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.3/metas.php b/projects/doctrine-rst-parser/en/0.3/metas.php
index b2bb0a6aa46d..842157cd452f 100644
Binary files a/projects/doctrine-rst-parser/en/0.3/metas.php and b/projects/doctrine-rst-parser/en/0.3/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.4/metas.php b/projects/doctrine-rst-parser/en/0.4/metas.php
index b2bb0a6aa46d..f4f656b36e46 100644
Binary files a/projects/doctrine-rst-parser/en/0.4/metas.php and b/projects/doctrine-rst-parser/en/0.4/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.5/metas.php b/projects/doctrine-rst-parser/en/0.5/metas.php
index 2d391c20a30e..f996459649e7 100644
Binary files a/projects/doctrine-rst-parser/en/0.5/metas.php and b/projects/doctrine-rst-parser/en/0.5/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/0.6/metas.php b/projects/doctrine-rst-parser/en/0.6/metas.php
index 43b3e08681ea..88c69e168fc6 100644
Binary files a/projects/doctrine-rst-parser/en/0.6/metas.php and b/projects/doctrine-rst-parser/en/0.6/metas.php differ
diff --git a/projects/doctrine-rst-parser/en/latest/metas.php b/projects/doctrine-rst-parser/en/latest/metas.php
index b2bb0a6aa46d..f4f656b36e46 100644
Binary files a/projects/doctrine-rst-parser/en/latest/metas.php and b/projects/doctrine-rst-parser/en/latest/metas.php differ
diff --git a/projects/doctrine-skeleton-mapper/en/0.0/metas.php b/projects/doctrine-skeleton-mapper/en/0.0/metas.php
index 31c87c4d622f..9cc111d1f78e 100644
Binary files a/projects/doctrine-skeleton-mapper/en/0.0/metas.php and b/projects/doctrine-skeleton-mapper/en/0.0/metas.php differ
diff --git a/projects/doctrine-skeleton-mapper/en/1.0/metas.php b/projects/doctrine-skeleton-mapper/en/1.0/metas.php
index 31c87c4d622f..f9350fc00084 100644
Binary files a/projects/doctrine-skeleton-mapper/en/1.0/metas.php and b/projects/doctrine-skeleton-mapper/en/1.0/metas.php differ
diff --git a/projects/doctrine-skeleton-mapper/en/2.0/metas.php b/projects/doctrine-skeleton-mapper/en/2.0/metas.php
index 31c87c4d622f..f9350fc00084 100644
Binary files a/projects/doctrine-skeleton-mapper/en/2.0/metas.php and b/projects/doctrine-skeleton-mapper/en/2.0/metas.php differ
diff --git a/projects/doctrine1/en/latest/metas.php b/projects/doctrine1/en/latest/metas.php
index bdbb94286989..b98878795cd3 100644
Binary files a/projects/doctrine1/en/latest/metas.php and b/projects/doctrine1/en/latest/metas.php differ
diff --git a/projects/doctrine1/ja/latest/metas.php b/projects/doctrine1/ja/latest/metas.php
index 7bbc7b7b4e22..fa2ce526925f 100644
Binary files a/projects/doctrine1/ja/latest/metas.php and b/projects/doctrine1/ja/latest/metas.php differ
diff --git a/projects/event-manager.html b/projects/event-manager.html
index 258d12466883..4a51372b6ba3 100644
--- a/projects/event-manager.html
+++ b/projects/event-manager.html
@@ -308,15 +308,15 @@
\n\nToday I am happy to announce the release of Doctrine 1.0-BETA1. This\nmarks the true start for the 1st generation Doctrine stable lifecycle.\nAs you may already know, Doctrine 1.0 has been slated to be released on\nSeptember 1st 2008 for quite some time now. We still have a few more\npre-1.0 releases to go until 1.0. The roadmap for now is BETA1, RC1, RC2\nand then 1.0 STABLE. You can see the roadmap in trac if you're\ninterested in keeping up with the Doctrine schedule. More information on\n1.0 and what other things to expect on September 1st will be given soon.\nMake some noise!\n\n
\n\n\n", - "date": "2008-08-05 00:00:00" - }, - { - "url": "/2015/12/25/common-2-5-3-and-2-6-1.html", - "slug": "common-2-5-3-and-2-6-1", - "title": "Common 2.5.3 and 2.6.1 Released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Common\n[2.5.3](https://github.com/doctrine/common/releases/tag/v2.5.3) and\n[2.6.1](https://github.com/doctrine/common/releases/tag/v2.6.1).\n\nCommon 2.5.3\n============\n\nThis release corrects an issue with the precedence of namespaces being\nmatched by the `SymfonyFileLocator`\n[\\#367](https://github.com/doctrine/common/pull/367).\n\nCommon 2.6.1\n============\n\nThis release includes all of the fixes reported above for 2.5.3.\n\nInstallation\n============\n\nYou can install the Common component using Composer and one of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/common\": \"~2.5.3\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/common\": \"~2.6.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/common/issues).\n", - "date": "2015-12-25 00:00:00" + "contents": "This past week I had the pleasure of spending time in Paris, France for\nthe [2010 Symfony Live](https://live.symfony.com/) conference. My\nfirst Symfony event was [Symfony Camp](http://www.symfonycamp.com) in\n2008 which was a great success. I also attended the first Symfony Live\nlast year where I spoke about [Sympal](http://www.sympalphp.org) and\nDoctrine. This time around the Symfony conference was an even bigger\nsuccess! The community around Symfony and Doctrine has grown a great\namount over the years and the event shows that! Many great speakers and\ntopics were present at the conference and it was very exciting to get to\nbe a part of it.\n\nOn the first day of the conference I was invited to speak about the\nlatest Doctrine 2! This is perfect timing as Fabien Potencier made\navailable the source code of [Symfony\n2](http://www.symfony-reloaded.org) the following day. I am very excited\nabout what the future holds for PHP in the coming years as Symfony 2 and\nDoctrine 2 are really revolutionary PHP projects!\n\nYou can find the presentations given at the conference related to\nDoctrine below:\n\n- [Using Doctrine\n Migrations](https://www.slideshare.net/denderello/symfony-live-2010-using-doctrine-migrations)\n- [Doctrine 2: Not the same Old PHP\n ORM](https://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm)\n\n", + "date": "2010-02-18 00:00:00" }, { - "url": "/2016/02/02/doctrine_module_1_0_0_stable_release.html", - "slug": "doctrine_module_1_0_0_stable_release", - "title": "DoctrineModule 1.0.0 we have a stable release", - "authorName": "Gianluca Arbezzano", - "authorEmail": "gianarb92@gmail.com", - "contents": "We are happy to announce the first stable release for DoctrineModule!\n[1.0.0](https://github.com/doctrine/DoctrineModule/releases/tag/1.0.0)\nis ready to go after a couple of years of work.\n\nThe [\"Initial\nCommit\"](https://github.com/doctrine/DoctrineModule/commit/13ededfcf10f9db6a4113cd9bdb4956ea145b6cd)\ndates back to the date Oct 22, 2011 after 4 years, we are ready.\n\nThanks at all for yours contributions!\n\nUpdate your composer configuration to use the stable version of this\nproject.\n\n```json\n{\n \"require\": {\n \"doctrine/doctrine-module\": \"~1.0\"\n }\n}\n```\n\nChanges since 0.10.0\n====================\n\nThis is a list of issues resolved in `1.0.0` since `0.10.0`:\n\n- [[\\#523]](https://github.com/doctrine/DoctrineModule/pull/523)\n Remove deprecated api call from test\n- [[\\#547]](https://github.com/doctrine/DoctrineModule/pull/547) Allow\n for the use of ZendCacheServiceStorageCacheAbstractServiceFactory\n\nPlease report any issues you may have with the update on the mailing\nlist or on [GitHub](https://github.com/doctrine/DoctrineModule/issues).\n\nRemember to read [our\ndocumentation](https://github.com/doctrine/DoctrineModule/tree/master/docs)\nand improve it with your knowledge.\n", - "date": "2016-02-02 00:00:00" + "url": "/2017/12/21/orm-2-6-0-and-next.html", + "slug": "orm-2-6-0-and-next", + "title": "Doctrine ORM 2.6 and Next (3.0)", + "authorName": "Mike Simonson", + "authorEmail": "mike@simonson.be", + "contents": "We are happy to announce the immediate availability of Doctrine ORM [2.6.0](https://github.com/doctrine/orm/releases/tag/v2.6.0).\n\nORM 2.6.0\n=========\n\nThis release contains almost 3 years of active development and it\nprovides several improvements and fixes, including:\n\n- Better commit order calculation\n- More stable second level cache\n- Strict testing and quality control\n- PHP 7.1+ requirement\n\n[changelog](https://github.com/doctrine/orm/releases/tag/v2.6.0).\n\nNext?\n=====\n\nThis release marks the feature freeze of the 2.x version.\n\nIf you need to improve please work on the develop branch that will\nbecome the 3.0 branch in the coming days. The changes are already too\nnumerous to easily rebase a feature from the 2.x branch to the develop\none.\n", + "date": "2017-12-21 00:00:00" }, { - "url": "/2010/01/22/doctrine-2-0-0-alpha4-released.html", - "slug": "doctrine-2-0-0-alpha4-released", - "title": "Doctrine 2 ALPHA4 Released", - "authorName": "romanb", + "url": "/2009/06/13/doctrine-visiting-conferences-around-the-world.html", + "slug": "doctrine-visiting-conferences-around-the-world", + "title": "Doctrine visiting conferences around the world", + "authorName": "jwage", "authorEmail": "", - "contents": "Today we are happy to announce the release of the next, and hopefully\nlast, alpha release of Doctrine 2. With over 60 fixed bugs and some\nimprovements this is another significant step towards the final release.\n\nHighlights\n==========\n\n- DBAL Refactorings: [DDC-169]\n- CLI Refactoring and Enhancements: [r6972] [DDC-223], [DDC-225]\n- Support for customizing the DDL of column definitions: [DDC-200]\n- XML Mapping Driver Improvements: [DDC-243], [DDC-242], [DDC-159]\n\nView the complete [change\nlog](https://www.doctrine-project.org/change_log/2_0_0_ALPHA4) to see a\ndetailed list of every change contained in this release. You can\n[download](https://www.doctrine-project.org/download#2_0) this release\nand report any issues you find in\n[Jira](https://www.doctrine-project.org/jira).\n\nWe would like to thank everyone who participated in this release through\nbug reports, patches and suggestions.\n\nWhat is Next?\n=============\n\nWe are planning to work towards entering beta from here on. There are\nstill some backwards-incompatible changes to come. Once we hit beta,\nefforts will concentrate on fixing bugs and further stabilizing the code\nbase. The first beta release is currently scheduled for March 1st, 2010.\n", - "date": "2010-01-22 00:00:00" + "contents": "This last month I have been present at a few events to speak about\nDoctrine. I visited Verona, Italy for the phpDay conference and this\nlast week I was present at the first Symfony conference in Paris,\nFrance. I also have given a few talks at some smaller local events such\nas the Nashville Enterprise LAMP group. Below are the links to the\npresentations on slideshare.\n\nWhat's new in Doctrine (symfony live)\n=====================================\n\n\n\nDoctrine has been used by many symfony developers for nearly two years\nas an externally maintained plugin. This week it became official and\nDoctrine will be bundled and supported by the symfony core team as of\nversion 1.2 which is slated for late Q4 2008. You can read the full blog\narticle on the symfony-project.org blog.\n\n
\n\n\n", + "date": "2008-09-18 00:00:00" }, { - "url": "/2009/10/06/doctrine-1-2-nearing-stable-release.html", - "slug": "doctrine-1-2-nearing-stable-release", - "title": "Doctrine 1.2 Nearing Stable Release", - "authorName": "jwage", - "authorEmail": "", - "contents": "Today I am happy to release to you the second ALPHA release of Doctrine\n1.2. Honestly, we didn't receive many reports of regressions or problems\nwith the new things in Doctrine 1.2 and we know lots of people have\nupgraded and using it so we feel it is a pretty stable release already.\n\nYou can view what all changed in this release by checking the\n[changelog](https://www.doctrine-project.org/change_log/1_2_0_ALPHA2) and\nyou can snag it from the\n[download](https://www.doctrine-project.org/download) page.\n\nWe hope that everything goes fine from here and the next release will be\nBETA1 followed by an RC and stable release. Please give 1.2 a try and\nreport any regressions to us so that we can be sure to get them fixed\nbefore the final stable release.\n", - "date": "2009-10-06 00:00:00" + "url": "/2015/08/18/doctrine-mongodb-odm-release-1-0-0.html", + "slug": "doctrine-mongodb-odm-release-1-0-0", + "title": "Doctrine MongoDB ODM release 1.0.0", + "authorName": "Maciej Malarz", + "authorEmail": "malarzm@gmail.com", + "contents": "In observance of August 18th, the day that Jon Wage tagged Doctrine\nMongoDB ODM's [first BETA\nrelease](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.0BETA1),\nwe've come together for a big celebration. From humble beginnings as a\nweekend hack to port Doctrine 2's data mapper pattern to NoSQL, the ODM\nquickly became a beast of a project and cut its teeth on production\nservers early on as a core dependency of the very first Symfony2\nstartups. Today, after five years of adoption, improvements,\nrefactoring, and [countless\njokes](https://twitter.com/jmikola/status/583047759160336384?lang=en)\u2026\nwe are very happy to announce the immediate availability of Doctrine\nMongoDB ODM 1.0.0!\n\nWhat is new in 1.0.0?\n=====================\n\nFor our first stable release, we focused on fixing most known bugs (some\nof which were open for *years*), hardening existing features, and\nstraightening out ODM's behaviour and correctness where possible. In\nhopes of ensuring a pleasant upgrade experience, we have prepared a\n[checklist](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#100-2015-08-18)\nfor you, which highlights the most important changes that may require\nyour attention. A complete list of resolved issues and pull requests may\nbe found on GitHub under the [1.0.0\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.0).\n\nBehind the scenes: Doctrine MongoDB 1.2.0\n=========================================\n\nWe are also happy to announce the immediate availability of Doctrine\nMongoDB 1.2.0, which is the underlying driver abstraction layer employed\nby the ODM. In particular, this release sports a brand new [Aggregation\nBuilder](https://github.com/doctrine/mongodb/pull/213), along with\nimproved query builder support for [update\noperators](https://github.com/doctrine/mongodb/pull/212) and and\n[full-text search](https://github.com/doctrine/mongodb/pull/184)\nintroduced in MongoDB 2.6. For a full list of closed issues and pull\nrequests, please see the [release notes on\nGitHub](https://github.com/doctrine/mongodb/releases/tag/1.2.0).\n\nStop fooling around, I want my BETA back!\n=========================================\n\nWe apologize for any inconvenience, but Doctrine MongoDB ODM has\nofficially gone stable and we don't intend on shipping more BETAs\nanytime soon. Well, at least not until work begins on 2.0 :D\n", + "date": "2015-08-18 00:00:00" }, { - "url": "/2008/01/05/project_status.html", - "slug": "project_status", - "title": "Project Status", + "url": "/2008/04/01/doctrine-goes-pecl.html", + "slug": "doctrine-goes-pecl", + "title": "APRIL FOOLS! Doctrine goes PECL", "authorName": "jwage", "authorEmail": "", - "contents": "Here is a short update on the current project status. We're heavily\ndeveloping towards a 1.0 release that will bring lots of enhancements\nlike improved inheritance mapping and lots of other stuff. We're\nespecially keen on making this release as stable as possible and on\npolishing the documentation.\n\nUntil then we strongly encourage everyone to use the 0.9 branch that can\nbe found here:\n[http://svn.phpdoctrine.org/branches/0.9](http://svn.phpdoctrine.org/branches/0.9)\nIt's a feature-frozen branch that recieves bugfixes. There will be no\nchanges that break backwards compatibility in this branch.\n\nThe current trunk is under heavy development, so please don't use it\nunless you are developing on Doctrine's source code or you are just very\ncurious.\n\nWhen the time for the 1.0 release comes near we will provide a migration\nguide and do everything possible to help you take the leap from 0.9 to\n1.0.\n\nPS: At this point, the the whole Doctrine team wants to apologize for\nthe version mess you've gone through (and are still getting through). We\nreally messed up in terms of release management mainly due to the lack\nof experience in this area. This stops here. 0.9 will stay and it will\nstay for a while. We're not going to rush releases again.\n\nThank you very much.\n", - "date": "2008-01-05 00:00:00" - }, - { - "url": "/2011/06/28/doctrine-2-1-rc2.html", - "slug": "doctrine-2-1-rc2", - "title": "Doctrine 2.1 Release Candidate 2", - "authorName": "beberlei", - "authorEmail": "", - "contents": "RC2 of Doctrine 2.1 is packaged and can be grabbed from\n[PEAR](http://pear.doctrine-project.org) and the download section.\n\nWe fixed several inconsistencies, backwards compatibility breaks and\nsome bugs.\n\nPlease test this release as it will probably be the base of the final\nrelease due to be released later this week. The scheduled date is\nThursday 30th, but due to personal timetable this may become the\nweekend.\n", - "date": "2011-06-28 00:00:00" + "contents": "After many long debates and countless hours of development, Doctrine has\nbeen successfully ported to a PECL extension and will be maintained as a\nPECL extension from now on. The extension can be downloaded and\ninstalled via PEAR. As a PECL extension the ORM performs 4 times as fast\nand brings unbelievable results. Enjoy!\n", + "date": "2008-04-01 00:00:00" }, { - "url": "/2009/06/13/doctrine-visiting-conferences-around-the-world.html", - "slug": "doctrine-visiting-conferences-around-the-world", - "title": "Doctrine visiting conferences around the world", - "authorName": "jwage", - "authorEmail": "", - "contents": "This last month I have been present at a few events to speak about\nDoctrine. I visited Verona, Italy for the phpDay conference and this\nlast week I was present at the first Symfony conference in Paris,\nFrance. I also have given a few talks at some smaller local events such\nas the Nashville Enterprise LAMP group. Below are the links to the\npresentations on slideshare.\n\nWhat's new in Doctrine (symfony live)\n=====================================\n\n\n\nRight out of the gate we're moving extremely fast. Only two days in to\nworking full-time on the project we've made some significant pushes\nforward. On Monday we made available the first 1.0 Release Candidate and\nthen immediately began working on the second and final release\ncandidate. This milestone is extremely significant as it already\ncontains over 70 closed tickets! It will be released either Wednesday or\nThursday and 1.0 Stable will follow after it on Monday September 1st.\nBelow are some other highlights on the progress made so far.\n\n
\n\nWebsite Updates\n\n
\n\nNew API Documentation Index\n\n
\n\n
\n\nNew Method Summary List\n\n
\n\n
\n\nRC2 Development Highlights\n\n
\n\nStarting in September 2008, I will begin working full-time on Doctrine!\nThis great opportunity has been allowed by Sensio, the creators of the\nsymfony MVC Framework. This arrangement will allow many great new things\nto happen for Doctrine. Below you will find a list of some of the things\nyou can look forward to:\n\n
\n\nThis is also good news for the symfony project as it is due to\nofficially support Doctrine as its primary ORM in future versions. I\nwill also be helping the core symfony team with the official integration\nof Doctrine with sfDoctrinePlugin.\n\n
\n\n\n", - "date": "2008-07-20 00:00:00" + "url": "/2022/01/22/sunsetting-dbal-2.html", + "slug": "sunsetting-dbal-2", + "title": "Sunsetting Doctrine DBAL 2", + "authorName": "Sergei Morozov", + "authorEmail": "morozov@tut.by", + "contents": "Since the release of [Doctrine DBAL 3.0.0 ](https://github.com/doctrine/dbal/releases/tag/3.0.0) in November 2020,\nthe 2.x release series effectively went into the maintenance mode. In the past year, we've been accepting mostly\nthe following types of patches for DBAL 2:\n\n1. Development dependency updates\n2. Security fixes\n3. Improvements to compatibility with PHP 8.1\n4. Improvements in the upgrade path to DBAL 3\n\nExcept for dependency updates, at the moment, there are no known issues in DBAL 2 that would fall into any of\nthe above categories.\n\nMany projects that depend on Doctrine DBAL depend on it indirectly via Doctrine ORM which until\n[release 2.10.0](https://github.com/doctrine/orm/releases/tag/2.10.0) didn't support DBAL 3.\nIt was one of the blockers of the DBAL 3 adoption which is no longer the case.\n\nWith all that said, the DBAL team announces the plan for sunsetting DBAL 2 in 6 months as of the ORM 2.10.0 release\nwhich is April 3, 2022. After that date, we plan to release DBAL 2 only to address security related\nand other critical issues for at most a year.\n\nAll Doctrine DBAL users are encouraged to upgrade to the latest stable version\nwhich is [3.3.0](https://github.com/doctrine/dbal/releases/tag/3.3.0) as of the time of this writing.\n\nFor migrating from DBAL 2 to 3, see our two blog posts on DBAL 2.13 Forward Compatibility Layer:\n\n- [New Release: Doctrine DBAL 2.13 with Deprecations and Forward Compatibility](https://www.doctrine-project.org/2021/03/29/dbal-2.13.html)\n- [New Release: Doctrine DBAL 2.13.1 and 3.1.0 with important Forward Compatibility fix](https://www.doctrine-project.org/2021/04/19/dbal-2.13.1-3.1.0.html)\n", + "date": "2022-01-22 00:00:00" }, { - "url": "/2009/12/01/more-doctrine-releases.html", - "slug": "more-doctrine-releases", - "title": "More Doctrine Releases", + "url": "/2009/05/11/doctrine-1-0-9-and-1-1-1-released.html", + "slug": "doctrine-1-0-9-and-1-1-1-released", + "title": "Doctrine 1.0.9 and 1.1.1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Only a few hours ago we released the stable version of Doctrine 1.2! Now\nwe bring you two maintenance releases for the 1.0 and 1.1 versions of\nDoctrine. The number of changes in these releases are small, but they\nare important bug fixes. It is recommended that you upgrade. Download\n[1.0.14](https://www.doctrine-project.org/download#1_0) and\n[1.1.6](https://www.doctrine-project.org/download#1_1) now and report any\nissues you discover in [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2009-12-01 00:00:00" + "contents": "Today I am very happy to make available two new releases of Doctrine for\nthe 1.0 and 1.1 code bases. These are both significant bug fix releases\nand it is recommended that you upgrade right away.\n\n- [1.1.1](https://www.doctrine-project.org/download/1_1_1/format/tgz)\n- [1.0.9](https://www.doctrine-project.org/download/1_0_9/format/tgz)\n\nYou can find more information about these releases as usual on the\n[download](https://www.doctrine-project.org/download) page.\n", + "date": "2009-05-11 00:00:00" }, { - "url": "/2008/10/18/new-to-migrations-in-1-1.html", - "slug": "new-to-migrations-in-1-1", - "title": "New to Migrations in 1.1", - "authorName": "jwage", + "url": "/2010/09/01/birthday-release-party.html", + "slug": "birthday-release-party", + "title": "Birthday Release Party", + "authorName": "romanb", "authorEmail": "", - "contents": "In Doctrine 1.1 migrations are much easier to work with. In addition to\nthe increased stability we have enhanced the migrations in a few ways to\nsimplify the use of them dramatically.\n\nWe have introduced the following features.\n\n- Diff Tool - Generate migration classes by simply changing your\n schema and generating the migrations.\n- Down Automation - Doctrine now has the ability to automate the down\n of of a migration call.\n\nGenerating Migrations\n=====================\n\nImagine you have the following starting schema.\n\n [yml]\n ---\n User:\n columns:\n username: string(255)\n password: string(255)\n\nBuild your initial models from the schema.\n\n $ ./doctrine generate-models-yaml\n\nNow we want to enhance our schema to add some new columns as well as a\nnew model with the following schema.\n\n [yml]\n ---\n User:\n columns:\n username: string(255)\n password: string(255)\n email_address: string(255)\n\n Phonenumber:\n columns:\n user_id: integer\n phonenumber: string(25)\n relations:\n User:\n onDelete: CASCADE\n foreignAlias: Phonenumbers\n\nNow by simply changing our schema we can generate the migrations\nrequired to upgrade our database.\n\n $ ./doctrine generate-migrations-diff\n\nNow in your migrations directory you will see 3 migration classes\ncreated for you.\n\n`1224273485_add_user.php`\n-------------------------\n\n~~~~ {.sourceCode .php}\ncreateTable('up', 'user', array('id' => array('type' => 'integer', 'length' => 8, 'autoincrement' => true, 'primary' => true), 'username' => array('type' => 'string', 'length' => 255), 'password' => array('type' => 'string', 'length' => 255)), array('indexes' => array(), 'primary' => array(0 => 'id')));\n }\n\n public function down()\n {\n $this->dropTable('up', 'user');\n }\n}\n~~~~\n\n`1224273485_version1.php`\n-------------------------\n\n~~~~ {.sourceCode .php}\ncreateTable('up', 'phonenumber', array('id' => array('type' => 'integer', 'length' => 8, 'autoincrement' => true, 'primary' => true), 'user_id' => array('type' => 'integer', 'length' => 8), 'phonenumber' => array('type' => 'string', 'length' => 25)), array('indexes' => array(), 'primary' => array(0 => 'id')));\n $this->addColumn('up', 'user', 'email_address', '255', 'string', array ());\n }\n\n public function down()\n {\n $this->dropTable('up', 'phonenumber');\n $this->removeColumn('up', 'user', 'email_address');\n }\n}\n~~~~\n\n`1224273486_version2.php`\n-------------------------\n\n~~~~ {.sourceCode .php}\naddIndex('up', 'phonenumber', 'phonenumber_user_id_user_id', array('fields' => array(0 => 'user_id')));\n $this->createForeignKey('up', 'phonenumber', array('name' => 'phonenumber_user_id_user_id_idx', 'local' => 'user_id', 'foreign' => 'id', 'foreignTable' => 'user', 'onUpdate' => NULL, 'onDelete' => 'CASCADE'));\n }\n\n public function down()\n {\n $this->removeIndex('up', 'phonenumber', 'phonenumber_user_id_user_id', array('fields' => array(0 => 'user_id')));\n $this->dropForeignKey('up', 'phonenumber', array('name' => 'phonenumber_user_id_user_id_idx', 'local' => 'user_id', 'foreign' => 'id', 'foreignTable' => 'user', 'onUpdate' => NULL, 'onDelete' => 'CASCADE'));\n }\n}\n~~~~\n\nDown Automation\n===============\n\nIn addition to Doctrine being able to generate migrations based on your\nschema changes, you can now easily automate the down of most methods.\nThe last migration class could be simplified a lot by doing the\nfollowing.\n\n~~~~ {.sourceCode .php}\naddIndex($direction, 'phonenumber', 'phonenumber_user_id_user_id', array('fields' => array(0 => 'user_id')));\n $this->createForeignKey($direction, 'phonenumber', array('name' => 'phonenumber_user_id_user_id_idx', 'local' => 'user_id', 'foreign' => 'id', 'foreignTable' => 'user', 'onUpdate' => NULL, 'onDelete' => 'CASCADE'));\n }\n}\n~~~~\n\nNotice that in this example we only have one method named migrate()\nwhich receives a direction. Most API methods are easy to automate the\nopposite down so when migrate is called with \\$direction = 'down' then\nthe index and foreign key will be dropped instead of added.\n", - "date": "2008-10-18 00:00:00" + "contents": "Today is Jonathan's birthday and in order to celebrate properly we're\nrolling out three new releases.\n\nDoctrine Common RC1\n===================\n\nThe first release candidate of the Doctrine Common project.\n\n- [Installation](https://www.doctrine-project.org/projects/common/2.0/download/2.0.0RC1)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10081)\n\nDoctrine DBAL BETA4\n===================\n\nThe last beta release of the Doctrine DBAL project.\n\n- [Installation](https://www.doctrine-project.org/projects/dbal/2.0/download/2.0.0BETA4)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10071)\n\nDoctrine ORM BETA4\n==================\n\nThe last beta release of the Doctrine ORM project.\n\n- [Installation](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA4)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10072)\n\nAgain we want to thank everyone who participated in the ongoing\ndevelopment efforts, whether it was through bug reports, comments,\ncritique, praise and/or actual code contributions.\n\nWhat next\n=========\n\nSome might know that we originally planned to release 2.0 stable today\nbut we're simply not there yet. However, things are going quite well and\nwe're confident that the final releases of the 2.0 versions are close.\nThe ORM and DBAL now enter a final phase of bug-fixing to resolve any\nissues we find critical for the final releases and will then follow the\nCommon project into RC (release candidate) status.\n", + "date": "2010-09-01 00:00:00" }, { - "url": "/2009/03/16/doctrine-1-1-released.html", - "slug": "doctrine-1-1-released", - "title": "Doctrine 1.1 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "Today I am very pleased to bring news to you that Doctrine 1.1.0 stable\nis available. This is a significant release for the 1.x code base. It\ncontains dozens of new features and bug fixes. The 1.1 test suite now\nhas **0** fails in the test suite compared to 1.0 having **12**! We\nrecommend you upgrade your projects.\n\n> **NOTE** Some have asked whether 1.1 has all the same bug fixes that\n> are in 1.0. The answer is yes. We are committed to maintaining both\n> branches and will continue committing fixes to all branches when it\n> applies.\n\nHighlights\n==========\n\n- New hydration methods\n- New migration diff tool\n- Better custom accessor/mutator support and integration with\n fromArray() and toArray()\n- Improvements to getModified(), toArray(), fromArray(),\n synchronizeWithArray()\n- Improvements to core behaviors Searchable, SoftDelete, Versionable\n- Dozens of small improvements and additions across the api\n- Plenty of other bug fixes\n\nYou can read a detailed list of all the changes made in 1.1\n[here](https://www.doctrine-project.org/upgrade/1_1) in the upgrade file.\n\nDownload\n========\n\nAs always you can get Doctrine on the\n[download](https://www.doctrine-project.org/download) page or via pear.\n\n $ pear install pear.phpdoctrine.org/Doctrine-1.1.0\n\nYou can also check it out via svn.\n\n $ svn co http://svn.doctrine-project.org/tags/1.1.0/lib doctrine\n\nIf you find any problems with this release please report it on our\n[trac](http://trac.doctrine-project.org) or if you have any questions\nyou can send it to one of our [mailing\nlists](https://www.doctrine-project.org/community).\n", - "date": "2009-03-16 00:00:00" + "url": "/2022/01/11/orm-2.11.html", + "slug": "orm-2.11", + "title": "New Release: Doctrine ORM 2.11 with Enums, Virtual Columns, Read-Only Properties, Nested Attributes and more", + "authorName": "Benjamin Eberlei", + "authorEmail": "kontakt@beberlei.de", + "contents": "We have released a new minor version 2.11 of Doctrine ORM with several improvements\nand new features.\n\n[See all changes and contributors in the\nChangelog](https://github.com/doctrine/orm/releases/tag/2.11.0) on Github.\n\nThis blog post gives an overview over all the new features and improvements\nthat are user facing. Please see the changelog and UPGRADE notes for new\ndeprecations.\n\n## PHP 8.1 Enum Support\n\nWith PHP 8.1 the language has first class support for enumerations and Doctrine\nORM 2.11 supports the mapping of database values to [Backed\nEnums](https://www.php.net/manual/en/language.enumerations.backed.php).\n\nThe support is not integrated on DBAL Type level, but using a new mapping option\ncalled `enumType` on column/field declaration level:\n\n```php\nenum Suit: string {\n case Hearts = 'H';\n case Diamonds = 'D';\n case Clubs = 'C';\n case Spades = 'S';\n}\n\n#[Entity]\nclass Card\n{\n /** ... */\n\n #[Column(type: 'string', enumType: Suit::class)]\n public $suit;\n}\n```\n\n## Virtual and Generated Columns\n\nThere has been constant demand for this feature for a long time, to add support\nfor columns that are not insertable/updatable and might have their value\nupdated on the database side.\n\nWe have worked along the lines of Java Persistence API support of `insertable`,\n`updatable` and `generated` options for field mappings.\n\nThere are two major use cases for this:\n\n1. Map a column several times, for example with join columns:\n\n```php\n#[Entity]\nclass User\n{\n #[ManyToOne(targetEntity: Country:class), JoinColumn(name: \"country_code\", referencedColumnName: \"country_code\")]\n public $country;\n\n #[Column(type: \"string\", name: \"country_code\", insertable: false, updatable: false)]\n public $countryCode;\n}\n```\n\n2. Columns updated by the database\n\n```php\n#[Entity]\nclass Article\n{\n #[Column(type: \"datetime\",\n columnDefinition: \"TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\",\n insertable: false,\n updatable: false,\n generated: \"ALWAYS\")]\n public $created;\n}\n```\n\n## Support for Readonly Properties\n\nAnother PHP 8.1 feature is the new readonly keyword that prevents the value of\na property to be written again after it has been initialized in the constructor\nof an object.\n\nWith ORM 2.11 the support now works as you would expect with no additional\nmapping options necessary:\n\n```php\n#[Entity, Table(name: 'author')]\nclass Author\n{\n #[Column, Id, GeneratedValue]\n private readonly int $id;\n\n #[Column]\n private readonly string $name;\n}\n```\n\n## AssociationOverrides and AttributeOverrides in Attribute Driver\n\nThe new `AttributeDriver` for PHP 8 did not support the equivalent mapping\noptions for association and attribute overrides that are available for XML and\nAnnotation mapping, because in PHP 8.0 it was not possible to nest complex\nattributes. \n\nWith the support now available in PHP 8.1 we have added these attributes.\n\n```php\nsetSchemaIgnoreClasses([$fqcn]);\n$config->getSchemaIgnoreClasses();\n```\n", + "date": "2022-01-11 00:00:00" }, { - "url": "/2010/04/27/doctrine-2-0-0-beta1-released.html", - "slug": "doctrine-2-0-0-beta1-released", - "title": "Doctrine 2 BETA1 Released", - "authorName": "romanb", + "url": "/2010/03/15/what-to-expect-from-doctrine-1.html", + "slug": "what-to-expect-from-doctrine-1", + "title": "What to expect from Doctrine 1", + "authorName": "jwage", "authorEmail": "", - "contents": "Today we are pleased to announce the immediate release of the first beta\nversion of Doctrine 2. It comes with some delay which was caused partly\nby our move to git and github and the switch to the Symfony Console\ncomponent for the CLI. We had to confront the alpha users with quite\nsome backwards compatibility problems and we apologize for that.\nStarting with the beta period you can expect the amount of backwards\nincompatible changes to be much lower.\n\nSince the ALPHA4 release over 160 issues have been resolved. You can\nfind the full changelog\n[here](https://www.doctrine-project.org/jira/secure/ReleaseNote.jspa?projectId=10032&styleName=Html&version=10030).\n\nSome of the most important changes were the shift towards the Symfony\n(2) Console component for the CLI as well as the introduction of the\ninversedBy attribute for bidirectional associations, among others. For\nsome help with upgrading from ALPHA4 to BETA1, please consult [the\nupgrade page](https://www.doctrine-project.org/upgrade/2_0).\n\nYou can get the new release as usual from our [download\npage](https://www.doctrine-project.org/download) or [directly from\ngithub](https://github.com/doctrine/orm).\n\nWe would like to thank all the adopters of the early alpha releases. All\nyour issue reports, feature and enhancement requests and general\nfeedback and criticism have helped a lot to move the project forward.\n\nLooking forward, we will likely have at least 2 or 3 beta releases,\nabout every 1-2 months, before we go RC. Once that happens, the API is\nultimately frozen until the stable release.\n", - "date": "2010-04-27 00:00:00" + "contents": "As you all can obviously see, our focus around here these days has been\non Doctrine 2. While overall this is a great thing, we still have a\nstable Doctrine 1.2 version to maintain. This blog post will give you a\nlittle information about Doctrine 1.0, 1.1 and 1.2.\n\nDoctrine 1.0 and 1.1 End of Life\n================================\n\nYou may not have noticed, but the end of life for Doctrine 1.0 and 1.1\nhas come and gone earlier in the year. As of right now we will not be\ncommitting anymore bug fixes to these branches. All development\nresources will now focus on finishing Doctrine 2 and maintaining 1.2.\n\nDoctrine 1.2 Maintenance Releases\n=================================\n\nSince Doctrine 1.2 is the last stable version to be released for the\nDoctrine 1 series, we decided to open up the development a little bit\nfor the maintenance releases. Previously we were very strict with only\nallowing bug fixes, but we will now allow a little more flexibility to\nthe types of things we commit to these releases. They can now contain\nsmall enhancements and improvements as long as they do not break\nbackwards compatibility. Of course when adding things we cannot always\nbe 100% sure that something is BC, so we will announce each 1.2.x\nrelease one week prior to it's packaging and deployment in order to give\npeople time to test things in SVN.\n\nThe reasoning behind this move is because we want to still improve the\nsmall usability issues of the Doctrine 1 series without having to commit\nto entirely new major versions. This way we are not leaving the Doctrine\n1 code behind while we're focusing on the Doctrine 2 version. We hope\nthat you all are okay with this move. If you have any issues please let\nus know!\n", + "date": "2010-03-15 00:00:00" }, { - "url": "/2008/03/28/0-10-4-released-46-closed-tickets.html", - "slug": "0-10-4-released-46-closed-tickets", - "title": "0.10.4 Released - 46 Closed Tickets", + "url": "/2008/04/05/doctrine-frequently-asked-questions.html", + "slug": "doctrine-frequently-asked-questions", + "title": "Doctrine frequently asked questions", "authorName": "jwage", "authorEmail": "", - "contents": "Today we would like to announce the 0.10.4 release. This release\naddresses 46 tickets and is a major step in stabilizing the 1st\ngeneration of Doctrine for the 1.0 release. We will continue with bug\nfix only releases until we feel the 0.10 branch is ready for a 1.0\ntitle. Give it a try and give us some tickets and failing test cases to\nfix :)\n\nYou can checkout the change log for the 0.10.4 release as well as\nprevious releases here.\n", - "date": "2008-03-28 00:00:00" + "contents": "We have compiled a new addition to the Doctrine website, Frequently\nAsked Questions. The purpose of this is to help the users of Doctrine\nidentify any common questions/problems when using Doctrine. I have added\nall the questions I have encountered multiple times over the last year+.\nIf you have any recommendations for this least please don't be shy and\nlet us know. Thanks.\n", + "date": "2008-04-05 00:00:00" }, { - "url": "/2014/12/04/doctrine_dbal_2_5_release.html", - "slug": "doctrine_dbal_2_5_release", - "title": "Doctrine DBAL 2.5 Release", - "authorName": "Benjamin Eberlei", + "url": "/2012/08/29/doctrine-2-3-rc2.html", + "slug": "doctrine-2-3-rc2", + "title": "Doctrine 2.3.0 RC2 released", + "authorName": "beberlei", "authorEmail": "", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n2.5.0 Stable. This release is a landmark in making DBAL more consistent\nand stable than it ever was.\n\nStarting with 2.5 DBAL will have a new release-master, [Steve\nM\u00fcller](https://github.com/deeky666). Steve has been working on DBAL for\nthe last two years and contributed many of the big features that make up\nthis fantastic release. He will replace Benjamin Eberlei who was the\nrelease master since version 2.0.\n\nYou can install DBAL through Composer:\n\nThis version is mostly backwards compatible with only some minor breaks,\nwhen using PDO IBM, creating a custom platform or using non-default\nDateTime formats. You can see the breaks in the\n[UPGRADE.md](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\nfile. DBAL 2.5 is also compatible with ORM 2.4, there is no need to wait\nfor ORM 2.5 to be released.\n\nThe following list contains the major new features of DBAL:\n\n- Support for SAP Sybase SQL Anywhere versions 10, 11, 12 and 16\n (DBAL-475)\n- Support for auto-commit=NO on all drivers and platforms. (DBAL-81)\n- Refactor exceptions to use common error-codes and exception classes\n that derive from `Doctrine\\DBAL\\DBALException`. (DBAL-407)\n- Add support to retry connections with\n `Doctrine\\DBAL\\Connection#ping()` method. (DBAL-275)\n- Add INSERT support to QueryBuilder (DBAL-320)\n- Add Binary type for VARBINARY support (DBAL-714)\n- Add charset and SSL connection support to PostgreSQL (DBAL-567,\n DBAL-702)\n- Add options support for Myqli (DBAL-643)\n- Add support for using database uris with the `url` parameter in\n `DriverManager::getConnection()` which supports several forms used\n by PaaS providers out of the box (DBAL-1050).\n- Auto detection of platform to use based on database (DBAL-757)\n- Improved SQL Server LIMIT emulation support. (Multiple tickets)\n- Improvements to HHVM Support (no full support yet)\n\nSee all the changes for the 2.5.0 Release on Jira, an amazing total of\n316 issues:\n\n- [DBAL\n 2.5.0](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10523/)\n\nIf you find any problems or backwards compatibility breaks with this\nrelease please report them on JIRA or open up Pull Requests on Github.\n", - "date": "2014-12-04 00:00:00" + "contents": "**29.8.2012**\n\nWe released another release candidate of our upcoming Doctrine 2.3.0\nversion. This includes the Common, DBAL and ORM packages.\n\nThis release trys to keep backwards compatibility to every previous\nrelease as much as possible, however some slight changes might be\nnecessary to your applications. See the UPGRADE files of each project\nfor details:\n\n- [ORM](https://github.com/doctrine/orm/blob/master/UPGRADE.md)\n- [DBAL](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\n\nSee the [2.3 Beta blog\npost](https://www.doctrine-project.org/2012/07/16/doctrine-2-3-beta.html) for\nsome information about changes in 2.3.\n\nYou can install the release candidate through\n[Github](https://github.com/doctrine/orm) or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.0-RC2\"\n },\n \"minimum-stability\": \"dev\"\n }\n\nIf you find any problems with your applications please report them on\nour [bugtracker](https://www.doctrine-project.org/jira).\n\nWhen no blocking issues occur we will release the 2.3.0 final on next\nMonday.\n", + "date": "2012-08-29 00:00:00" }, { - "url": "/2008/09/11/doctrine-1-0-2-released.html", - "slug": "doctrine-1-0-2-released", - "title": "Doctrine 1.0.2 Released", + "url": "/2008/11/25/doctrine-1-0-4-released.html", + "slug": "doctrine-1-0-4-released", + "title": "Doctrine 1.0.4 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Due to a minor regression in 1.0.1 we are releasing 1.0.2 which\naddresses the issue discovered. The issue was reported and fixed\nimmediately. Big thanks to Adam Huttler for the detailed report which\nallowed us to fix the issue right away. You can download the new version\nhere or upgrade via pear as usual.\n", - "date": "2008-09-11 00:00:00" + "contents": "Today we are happy to introduce the immediate availability of Doctrine\n1.0.4. This is a major bug fix release for the 1.0 branch of Doctrine.\nIt contains over 75 bug fixes and it is recommended that you upgrade as\nsoon as possible. As always you can view the [change\nlog](https://www.doctrine-project.org/change_log/1_0_4) on the website\nand [download here](https://www.doctrine-project.org/download).\n", + "date": "2008-11-25 00:00:00" }, { - "url": "/2009/06/28/introducing-the-google-i18n-extension.html", - "slug": "introducing-the-google-i18n-extension", - "title": "Introducing the Google I18n Extension", + "url": "/2010/03/01/introduction-to-doctrine-2-webinar.html", + "slug": "introduction-to-doctrine-2-webinar", + "title": "Introduction to Doctrine 2 Webinar", "authorName": "jwage", "authorEmail": "", "contents": "", - "date": "2009-06-28 00:00:00" + "date": "2010-03-01 00:00:00" }, { - "url": "/2015/12/03/cache-1-5-2.html", - "slug": "cache-1-5-2", - "title": "Cache 1.5.2 Released", + "url": "/2014/09/23/orm-245.html", + "slug": "orm-245", + "title": "ORM 2.4.5 released", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.5.2](https://github.com/doctrine/cache/releases/tag/v1.5.2).\n\nCache 1.5.2\n===========\n\nThis release corrects a few bugs:\n\nFetching `false` values from the cache via\n`` fetchMultiple` was causing incorrect misses (`#105\n\nToday, I would like to introduce the latest stable version of Doctrine,\n0.11.0. This release is a major release but it contains bug fixes only.\nIt contains a few BC enhancements that were required in order to fix\nsome bugs. We recommend everyone upgrade to 0.11. Below are some\nhighlights of this release.\n\n
\n\nAnother item worth mentioning about the 0.11 release is that the\nintegration between Doctrine and symfony has evolved quite well over the\nfirst quarter of 2008 as symfony 1.1 is coming out and 0.11 is released.\nThe integration between symfony 1.1 and Doctrine with sfDoctrinePlugin\nis now officially supported by the symfony core team and we will slowly\nbe introducing more documentation over the coming months.\n\n
\n\n\n", - "date": "2008-06-24 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n2.4.5, which fixes [an HHVM/PHP7 issue related with\nfunc\\_get\\_args()](https://3v4l.org/NIqRh).\n\nYou can find all the changes on JIRA:\n\n- [ORM\n 2.4.5](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10722)\n - 1 issue fixed\n\nYou can install the ORM using Composer and the following `composer.json`\ncontents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/orm\": \"2.4.5\"\n }\n}\n~~~~\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2014-09-23 00:00:00" }, { - "url": "/2023/10/11/orm3-beta1-dbal4-rc1-future-plans.html", - "slug": "orm3-beta1-dbal4-rc1-future-plans", - "title": "ORM 3.0 Beta 1, DBAL 4 RC 1 and future plans", + "url": "/2020/11/17/dbal-3.0.0.html", + "slug": "dbal-3.0.0", + "title": "New Major Release: Doctrine DBAL 3.0", "authorName": "Benjamin Eberlei", "authorEmail": "kontakt@beberlei.de", - "contents": "We have released the [first beta of the long awaited Doctrine ORM\n3](https://github.com/doctrine/orm/releases/tag/3.0.0-beta1) and a [release\ncandidate of DBAL 4](https://github.com/doctrine/dbal/releases/tag/4.0.0-RC1). \n\nThe target audience for these releases are framework integration and extension\nlibrary authors. ORM 3 is not yet production ready and the APIs may change.\n\nOur goal is to release ORM 3.0 as soon as possible and to gather feedback from\ngreenfield project authors first. \n\nThis beta release is the result of a lot of work by many contributors,\nespecially Gr\u00e9goire, Alexander, Claudio and Matthias on ORM, Sergei and\nAlexander on DBAL. To iron out the final details, we met in D\u00fcsseldorf for a\nDoctrine Core Team meeting, generously funded by our sponsors through\nOpenCollective and GitHub. We also welcomed Matthias as the latest member of\nthe Doctrine Core Team.\n\n### Continued ORM 2 support and forward compatibility\n\nWe will maintain the latest branch of the 2 line in ORM for at least another 2\nyears, possibly longer, to give you enough time to upgrade and us more time to\nlearn from upgrader feedback and improve forward compatibility.\n\nThis means that we will be making ORM 2.x work with newer versions of PHP,\nfixing security bugs, and introducing layers and features that help with\nforward compatibility in the upgrade path to ORM 3. \n\nCurrent users of ORM 2 should note that there is no urgency right now to update\nto ORM 3, as we are still working on replacement APIs and forward\ncompatibility, and do not intend to ship them all with ORM 3.0, but with later\nversions.\n\n### ORM 2 users can already prepare for 3 by addressing deprecations\n\nBut there is already work to be done as an ORM 2 user: to help you find all the\nplaces where things may be deprecated or changing behaviour, we have created\n[the doctrine/deprecations\nlibrary](https://github.com/doctrine/deprecations#usage-from-consumer-perspective)\nand integrated it heavily into DBAL, ORM and other components.\n\nIt allows the use of deprecated behaviour to be logged at runtime with low\noverhead, automatic suppression of the same deprecation occurring multiple\ntimes, and a way to ignore selected deprecations for the time being. Each\ndeprecation message always links to a GitHub issue with more details.\n\nMany deprecated features have no replacement, such as Mapping Exporters,\nGenerate Mapping from Database, Named Queries. \n\nFor some of the deprecations in ORM, we are still planning replacement APIs,\nespecially:\n\n* There is currently no way to limit the number of entities that the flush\n operation considers changed. Flush will currently always calculate change\n sets on all entities that are not read-only. \n* As a replacement for removing PARTIAL object hydration, we are looking at\n making embeddable objects lazy, perhaps improving nesting of the new DTO\n expression in DQL. We are also looking to introduce subselect or batch\n loading for collections for more efficient multi-level hydration.\n\nThese will be released in 2.x as forward compatible APIs so that you can switch\nto using them before upgrading to ORM 3.\n", - "date": "2023-10-11 00:00:00" + "contents": "We have released a new major version of Doctrine DBAL, version 3.0.0. This new\nmajor version comes almost 10 years after DBAL 2.0 was released on December\n2010, then coupled into the ORM 2.0.\n\nToday Doctrine DBAL is released independent of the ORM, thanks to Composer and\nsees its new major version before the ORM.\n\nThis release was made possible foremost by\n[Sergei Morozov](https://twitter.com/srgmrzv), our primary DBAL maintainer, who has\nspent countless hours working on the package since 2016. Thank you!\n\nSee the [Release Notes](https://github.com/doctrine/dbal/releases/tag/3.0.0)\nfor a detailed list of changes.\n\nThis blog post covers a few of the major changes in a bit more detail to give\nyou an idea of what DBAL 3.0 looks like.\n\n### Decouple DBAL from PDO\n\nThe major theme of DBAL 3.0 is the decoupling from PDO. Instead of copying the\nAPI verbatim like DBAL 2.0 did, DBAL 3.0 grows it into a better, more usable\ndirection.\n\nWe extract all fetch-methods from the `Statement` class and moved them to a new\n`Result` class that is returned from `Statement::execute`.\n\nOld code:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$statement->bindParam(1, $value);\n$statement->execute();\n\nwhile ($row = $statement->fetch()) {\n}\n```\n\nNew Code:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$statement->bindParam(1, $value);\n$result = $statement->execute();\n\nwhile ($row = $result->fetchAssociative()) {\n}\n```\n\nThe Result Fetching API was improved to use more human-readable names:\n\n```php\n// Old\n$stmt->fetch();\n$stmt->fetch(PDO::FETCH_ARRAY);\n$stmt->fetchColumn();\n$stmt->fetchAll();\n\n// New\n$stmt->fetchAssociative();\n$stmt->fetchNumeric();\n$stmt->fetchOne();\n$stmt->fetchAllAssociative();\n```\n\nMany more changes have been made on the public API and also for the internals,\nbut these are the most visible ones.\n\n### Upgrading to DBAL 3 from 2\n\nDBAL 3 is a real new major release with significant changes to the public API. Depending\non your codebase a migration could require non-trivial work. However we do not intend\nto leave you hanging with DBAL 2 and a future migration:\n\n1. We intend to support DBAL 2.12 a while longer, including support for the\n upcoming PHP 8.0, so that there is no rush for you to upgrade to DBAL 3.\n\n2. DBAL 2.12 already includes forwards compatible API changes for all the new APIs,\n so that you can migrate your code step by step to the new APIs already.\n\n3. Deprecated methods in DBAL 2.12 are tagged with the `@deprecated` doc-block\n and static analysis tools such as Psalm, PHPStan and Phan can already help\n you detect using or calling this deprecated code in your application.\n\n4. We intend to release another version of DBAL 2 which includes\n optional triggering of deprecation messages at runtime similar to how Symfony\n deals with deprecations.\n\nAs you can see, with these approaches it will be possible for you to smoothly migrate\nyour application from DBAL 2 to 3.\n\nAs a note to libraries and frameworks that need to support multiple versions of\nDoctrine DBAL: We recommend you start out with DBAL 2.12 and migrate all usages\nof deprecated APIs to their newer counterparts. Then once you have managed\nthis, you can allow 3.0 and try to get your code working with both versions.\nUnfortunately this may not be possible for all cases, because we could not\nprovide replacement APIs for everything and some features have been dropped\nbetween DBAL 2 and 3.\n\n### Outlook\n\nDBAL 3 is a huge first step towards a modern database abstraction layer,\nindependent from the legacy of PHP and PDO API design. In the future we plan to\nimprove DBAL in other ways that we haven't gotten around yet, such as more API\nmodernization, increased safety with use of strict scalar types in the code\nbase, better error handling and more.\n", + "date": "2020-11-17 00:00:00" }, { - "url": "/2009/06/19/cross-database-joins.html", - "slug": "cross-database-joins", - "title": "Cross Database Joins", + "url": "/2009/01/28/cookbook-recipe-relation-dql-behavior.html", + "slug": "cookbook-recipe-relation-dql-behavior", + "title": "Cookbook Recipe: Relation DQL Behavior", "authorName": "jwage", "authorEmail": "", - "contents": "Cross Database Joins\n====================\n\nIn Doctrine, joining data across databases is not technically\n\"supported\" by a designed feature, but you can make it work by tricking\nDoctrine a little bit.\n\nIn this article I'll show you how you can setup a database schema that\nspecifies relationships across two databases and then issue a query\nwhich joins data from these two databases.\n\nI used the Doctrine sandbox to prepare this test so if you want to try\nit, you can use it too.\n\nDatabase Connections\n====================\n\nFirst lets setup our two database connections we'll use to query from.\nModify the `config.php` file included with the sandbox and replace the\ndefault single connection with the following code.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->leftJoin('u.Profile p');\n\necho $q->getSql();\n~~~~\n\nThe above code would output the following SQL query.\n\n [sql]\n SELECT d.id AS d__id, d.username AS d__username, d.password AS d__password, d2.id AS d2__id, d2.user_id AS d2__user_id, d2.first_name AS d2__first_name, d2.last_name AS d2__last_name FROM doctrine_test1.user d LEFT JOIN doctrine_test2.profile d2 ON d.id = d2.user_id\n\n **NOTE** Notice how in the above SQL that is generated it include\n the database name and the table name. So now the query is able to\n join across databases if your RDBMS supports it.\n\nNow lets execute the above query and look at the results.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->leftJoin('u.Profile p');\n\n$users = $q->fetchArray();\n\nprint_r($users);\n~~~~\n\nThe above would output just exactly what you'd expect.\n\n Array\n (\n [0] => Array\n (\n [id] => 1\n [username] => jwage\n [password] => changeme\n [Profile] => Array\n (\n [id] => 1\n [user_id] => 1\n [first_name] => string(255)\n [last_name] => string(255)\n )\n\n )\n\n )\n\nThe data from the `User` model came from one database, and the data from\nthe `Profile` model came from the other database.\n\n> **NOTE** This will only work if your database supports foreign keys\n> and joins across databases. I know MySQL does support this but I am\n> unsure about others. This same method can be used to query for data\n> across PostgreSQL schemas too.\n\nThat is it! Joining data from across different databases is no problem\nin Doctrine.\n\n> **CAUTION** This is not a designed feature of Doctrine and you may\n> experience edge cases that may not work as you'd expect. This is just\n> useful if you need to join data across databases and if you experience\n> edge cases you can work around them in your project.\n", - "date": "2009-06-19 00:00:00" + "contents": "Today I will teach you how to write a simple Doctrine behavior. You will\nlearn some of the basics of creating a behavior and you will gain some\npretty cool functionality for your relationships.\n\nWe will write a behavior called `RelationDql` which allows you to add\ndefault query parts that are automatically added to your queries when\nyou reference the specified relationships. So first we will get started\nby looking at an example schema we can apply this to.\n\nHere is an example schema where we have a `Site`, `BlogPost` and `Tag`\nmodel:\n\n [yml]\n Site:\n columns:\n name: string(255)\n\n BlogPost:\n actAs: [Timestampable]\n columns:\n title: \"string(255)\"\n body: clob\n site_id: integer\n relations:\n Site:\n foreignAlias: BlogPosts\n Tags:\n class: Tag\n refClass: BlogPostTag\n foreignAlias: BlogPosts\n\n Tag:\n columns:\n name: string(255)\n\n BlogPostTag:\n columns:\n blog_post_id:\n type: integer\n primary: true\n tag_id:\n type: integer\n primary: true\n relations:\n BlogPost:\n foreignAlias: BlogPostTags\n Tag:\n foreignAlias: BlogPostTags\n\nThis is a fairly simple schema as you can see, but what if we want to\nhave a relationship on the `Site` model to retrieve the latest five\n`BlogPost` records or order the `Tags` relationship alphabetically by\ndefault?\n\nLets modify our schema to take into account a new behavior that we will\nwrite in the next step. First modify the `Site` model and a relationship\nnamed `LatestBlogPosts`:\n\n [yml]\n Site:\n actAs:\n RelationDql:\n relations:\n LatestBlogPosts:\n orderBy: %s.created_at DESC\n limit: 5\n columns:\n name: string(255)\n relations:\n LatestBlogPosts:\n autoComplete: false\n class: BlogPost\n local: id\n foreign: site_id\n\n **TIP** The ``autoComplete`` option is set to ``false`` so that the\n relationship is not reflected and added to the opposite end,\n ``BlogPost`` automatically.\n\nNow lets modify the `BlogPost` model to change the `Tags` relationship\nso that it is ordered alphabetically by name by default:\n\n [yml]\n BlogPost:\n actAs:\n Timestampable:\n RelationDql:\n relations:\n Tags:\n orderBy: %s.name ASC\n columns:\n title: \"string(255)\"\n body: clob\n site_id: integer\n relations:\n Site:\n foreignAlias: BlogPosts\n Tags:\n class: Tag\n refClass: BlogPostTag\n foreignAlias: BlogPosts\n\n **TIP** The ``relations`` array is an array of changes to make to\n the DQL query. The key can be any valid function on the\n ``Doctrine_Query`` API and the value is of course the parameter to\n pass to the function.\n\nNow that we have our schemas modified to take into account the new\n`RelationDql` behavior we need to actually write the code:\n\n~~~~ {.sourceCode .php}\n_options = $options;\n }\n\n public function setTableDefinition()\n {\n $this->_table->addRecordListener(new RelationDqlListener($this->_options));\n }\n}\n~~~~\n\nThe template is very simple. It only attaches a record listener to the\ninvoking table. Their is where most of the magic happens. So now lets\ndefine the `RelationDqlListener` class:\n\n~~~~ {.sourceCode .php}\n array());\n\n public function __construct($options)\n {\n $this->_options = $options;\n }\n\n public function preDqlSelect(Doctrine_Event $event)\n {\n $query = $event->getQuery();\n\n if (empty($this->_options['relations']))\n {\n throw new Doctrine_Exception(\n 'You must specify at least one relationship to add DQL to'\n );\n }\n\n $relations = $this->_options['relations'];\n\n $components = $this->_getDqlCallbackComponents($query);\n foreach ($components as $alias => $component)\n {\n if (isset($component['relation']) && isset($relations[$component['relation']->getAlias()]))\n {\n $dqls = $relations[$component['relation']->getAlias()];\n foreach ($dqls as $func => $dql)\n {\n $dql = str_replace('%s', $alias, $dql);\n $query->$func($dql);\n }\n unset($relations[$component['relation']->getAlias()]);\n }\n }\n }\n\n protected function _getDqlCallbackComponents($query)\n {\n $params = $query->getParams();\n $componentsBefore = array();\n if ($query->isSubquery()) {\n $componentsBefore = $query->getQueryComponents();\n }\n\n $copy = $query->copy();\n $copy->getSqlQuery($params);\n $componentsAfter = $copy->getQueryComponents();\n\n if ($componentsBefore !== $componentsAfter) {\n return array_diff($componentsAfter, $componentsBefore);\n } else {\n return $componentsAfter;\n }\n }\n}\n~~~~\n\nSo now we have the behavior defined so lets look at some example DQL\nqueries and the SQL that is outputted:\n\n> **TIP** Remember, in order for the dql callbacks to be executed we\n> must enable an attribute first.\n\n~~~~ {.sourceCode .php}\nsetAttribute('use_dql_callbacks', true);\n~~~~\n\n~~~~ {.sourceCode .php}\nselect('s.name, p.title, p.created_at')\n ->from('Site s')\n ->leftJoin('s.LatestBlogPosts p');\n\necho $q->getSql();\n~~~~\n\nThe above would output the following SQL:\n\n [sql]\n SELECT s.id AS s__id, s.name AS s__name, b.id AS b__id, b.title AS b__title, b.created_at AS b__created_at FROM site s LEFT JOIN blog_post b ON s.id = b.site_id ORDER BY b.created_at DESC LIMIT 5\n\n **NOTE** Notice how the ``ORDER BY`` and ``LIMIT`` were added to\n the query.\n\nNow lets look at an example that involves the `BlogPost` tags:\n\n~~~~ {.sourceCode .php}\nfrom('BlogPost p')\n ->leftJoin('p.Tags t');\n\necho $q->getSql();\n~~~~\n\nThe above would output the following SQL query:\n\n [sql]\n SELECT b.id AS b__id, b.title AS b__title, b.body AS b__body, b.site_id AS b__site_id, b.created_at AS b__created_at, b.updated_at AS b__updated_at, t.id AS t__id, t.name AS t__name FROM blog_post b LEFT JOIN blog_post_tag b2 ON b.id = b2.blog_post_id LEFT JOIN tag t ON t.id = b2.tag_id ORDER BY t.name ASC\n\nAs you can see the `ORDER BY` clause to order the related tags by `name`\nwas added for us.\n\nPretty cool huh? You can use this in your projects to make your\nrelationships a little nicer.\n", + "date": "2009-01-28 00:00:00" }, { - "url": "/2009/08/04/help-write-tests-for-new-dql-parser.html", - "slug": "help-write-tests-for-new-dql-parser", - "title": "Help write tests for new DQL Parser", - "authorName": "guilhermeblanco", + "url": "/2008/04/30/0-11-0-release-candidate-2.html", + "slug": "0-11-0-release-candidate-2", + "title": "0.11.0 Release Candidate 2", + "authorName": "jwage", "authorEmail": "", - "contents": "As you all know, we're focusing most of our development time on Doctrine\n2.0 these days. To help speed things up, we would like to ask for help\nwriting tests from our users\n\nRecently I finished new [DQL parser for\n2.0](http://trac.doctrine-project.org/browser/trunk/lib/Doctrine/ORM/Query/Parser.php).\nMost of you may not be familiar with compiler's theory, but for those\nthat are, it's a top-down recursive descent parser for a context-free\ngrammar, usually known as LL(k).\n\nWe mapped the entire supported DQL into a document, which is an [EBNF\n(Extended Backus-Naur\nForm)](https://en.wikipedia.org/wiki/Extended_Backus\u2013Naur_Form) , which\nis a meta-syntax notation to express context-free grammars. This one is\nquite simple to be readable by humans. Yes, we are humans if you raise\nthe question! =)\n\nThe header of our EBNF describes some terms and conventions, but here is\na small subset of our grammar:\n\n FromClause ::= \"FROM\" IdentificationVariableDeclaration {\",\" IdentificationVariableDeclaration}*\n IdentificationVariableDeclaration ::= RangeVariableDeclaration [IndexBy] {JoinVariableDeclaration}*\n RangeVariableDeclaration ::= AbstractSchemaName [\"AS\"] AliasIdentificationVariable\n AbstractSchemaName ::= identifier\n AliasIdentificationVariable ::= identifier\n\nIt's not mentioned in this subset some pieces just for clarity.\nIdentifier is a terminal (no grammar rule to follow after that) and is a\nstring (ie. \"`name`\", \"`email`\").\n\nWhat does this subset do?\n=========================\n\nIt processes this pieces of DQL:\n\n FROM User u\n FROM User AS u, u.Group g\n\nHow does it do that?\n====================\n\nEach piece of DQL is converted to a series of tokens. Some tokens are\ndefined in our [Symbol Table](https://en.wikipedia.org/wiki/Symbol_table)\n, which is then validated and correctly typed into the right token type.\nFor example... when it finds the \"`FROM`\", it'll return for us\ninternally a token in an array format of:\n\n array(\n 'value' => 'FROM',\n 'type' => Lexer::T_FROM,\n 'position' => 0\n )\n\nValue is the actual string representation in DQL, type is the token type\nthat was brought by symbol table and position is the position of this\ntoken in the DQL string.\n\nThen token is validated in the DQL parser; if it is expected the\n`T_FROM`, just match and go to next token, if not raise a syntax error.\nImagine someone types this: \"`FROM User u, u.Group u`\". It is not valid\nDQL, because alias \"`u`\" is being used twice. That is the task of\nanother check, which inspects the requested DQL defined symbol table and\nreports for semantical errors. We removed the lexical errors since we\nuse them as identifiers, so there is no lexical error checks in DQL. Not\nthat it may open a hole in our structure, syntax and semantical checks\ndo all that we need.\n\nHow can I help?\n===============\n\nWe currently have a single test that checks for DQL recognition. We need\nto expand it to cover as much situations as possible. If you follow the\nEBNF grammar rules, you'll see that for example, IN condition supports\neither a series of Literals (which can be strings, booleans, etc), an\nInputParameter or a subselect. We need some people with free time to\ncover all possible situations; I mean that we needs something like these\nqueries:\n\n SELECT u FROM CmsUser u WHERE u.id IN (1, 2)\n\n SELECT u FROM CmsUser u WHERE u.id IN (?0)\n\n SELECT u FROM CmsUser u WHERE u.name IN ('guilhermeblanco', 'jwage', 'romanb')\n\n SELECT u FROM CmsUser u WHERE u.id IN (SELECT u2.id FROM CmsUser u2)\n\nBy doing (sometimes) stupid queries and complex queries, we cover all\npossibilities and then we can finally consider that we have a good\ncoverage in our DQL support.\n\nIf you load the\n[LanguageRecognitionTest](http://trac.doctrine-project.org/browser/trunk/tests/Doctrine/Tests/ORM/Query/LanguageRecognitionTest.php)\n, you'll find that we have already builtin 2 methods to help you\nasserting DQL support: `assertValidDql` and `assertInvalidDql`. Just\nfollow the EBNF, pick defined models under [Models/CMS\nfolder](http://trac.doctrine-project.org/browser/trunk/tests/Doctrine/Tests/Models/CMS)\nand start writing tests.\n\nRunning tests\n=============\n\nIt is not hard to execute new test suite. Once you have\n[PHPUnit](https://phpunit.de) and [XDebug](https://xdebug.org) installed,\ngo to tests folder of trunk, create the directory `_coverage` (CHMOD\n0777) and execute:\n\n phpunit --coverage-html=./_coverage Doctrine_Tests_AllTests\n\nThen you'll have coverage too, which means it'll be even better to see\nwhere it's missing tests in suite.\n\nOnce you write your tests, create a ticket in our trac and then upload\nthe patched file there. We'll review your tests and commit them.\n\nTo generate a patch file, just type:\n`svn diff > /path/to/path/file.diff` I hope you enjoy new structure and\ncontribute with lots of tests!\n", - "date": "2009-08-04 00:00:00" + "contents": "Quick! Come and get it! The second release candidate of the latest\nDoctrine version, 0.11.0, has just been released. This release includes\na few dozen fixed tickets and a few new features required in order to\naddress existing issues/tickets. The complete changelog as always can be\nfound in the CHANGELOG file included with the source or online here.\n", + "date": "2008-04-30 00:00:00" }, { - "url": "/2016/10/07/doctrine-mongodb-odm-release-1.1.2-and-1.0.8.html", - "slug": "doctrine-mongodb-odm-release-1.1.2-and-1.0.8", - "title": "Doctrine MongoDB ODM 1.1.2 and 1.0.8 released", - "authorName": "Andreas Braun", - "authorEmail": "alcaeus@alcaeus.org", - "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.1.2](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.2)\nand\n[1.0.8](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.8).\n\nMongoDB ODM 1.0.8\n=================\n\n- calling `dropCollections()` in the SchemaManager did not drop GridFS\ncollections. [\\#1468](https://github.com/doctrine/mongodb-odm/pull/1468)\n- calling `clear()` on an uninitialized collection with `orphanRemoval`\nenabled failed to remove orphaned documents.\n[\\#1500](https://github.com/doctrine/mongodb-odm/pull/1500) - Documents\nwith identifiers evaluating to `false` (e.g. empty string or 0) could\nnot be reference using `createDBRef()` in DocumentManager.\n[\\#1503](https://github.com/doctrine/mongodb-odm/pull/1503)\n\nMongoDB ODM 1.1.2\n=================\n\n- This release contains the bugfixes outlined for ODM 1.0.8 above\n\n- Querying for referenced objects in `findBy()` or `findOneBy()` did not\nwork properly due to incorrect preparation of the DBRef objects.\n[\\#1481](https://github.com/doctrine/mongodb-odm/pull/1481)\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.1.2\"\n }\n}\n```\n\nSupport for Doctrine ODM 1.0.x\n==============================\n\nAs outlined previously, support for MongoDB ODM 1.0.x will end on\nDecember 9th, 2016. If you have not upgraded to version 1.1 yet, please\ndo so to receive future bug fixes.\n", - "date": "2016-10-07 00:00:00" + "url": "/2009/01/15/documentation-updates.html", + "slug": "documentation-updates", + "title": "Documentation Updates", + "authorName": "jwage", + "authorEmail": "", + "contents": "Enhancements\n============\n\nOver the past few days I have rolled out some changes to the\ndocumentation which are mostly aesthetic. Overall the changes make the\ndocumentation much richer and easier to read.\n\nSome of the changes made to the documentation are listed below:\n\n- Added next and previous links to navigate between chapters\n- Adding syntax highlight to YAML examples\n- Added syntax highlighting to SQL/DQL examples\n- Enhanced PHP syntax highlighting colors\n- Added styled caption boxes for notes, tips, sidebars and cautions\n- Other miscellaneous styling enhancements\n\nWhy?\n====\n\nWhy are we making these enhancements? This is in preparation for a new\nversion of the manual which will be the first piece of documentation on\nDoctrine available in print! We will release more information about when\nthis will be available soon.\n", + "date": "2009-01-15 00:00:00" }, { - "url": "/2012/01/30/doctrine-2-1-6.html", - "slug": "doctrine-2-1-6", - "title": "DBAL/ORM 2.1.6 released", - "authorName": "Benjamin Eberlei", + "url": "/2008/05/11/road-to-doctrine-1-0.html", + "slug": "road-to-doctrine-1-0", + "title": "Road to Doctrine 1.0", + "authorName": "jwage", "authorEmail": "", - "contents": "We released a new round of maintenance releases for the 2.1 branch. DBAL\nand ORM are now in version 2.1.6 of their lifecycle. There have been 8\nbug fixes in ORM and 8 in DBAL. See the changelogs:\n\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10182)\n- [DBAL\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10181)\n\nAs usual code is available via Download, PEAR, Packagist/Composer or\nfrom Github.\n", - "date": "2012-01-30 00:00:00" + "contents": "First I would like to thank everyone who has adopted Doctrine and stuck\nwith us through the many long and difficult development iterations.\nThough we have many more, and potentially even more difficult iterations\nto get through for Doctrine 2.0, we now see the end of the tunnel for\nDoctrine 1.0. I have laid out the official roadmap for 1.0 and it can be\nviewed on trac here. The planned release date of Doctrine 1.0 is\nSeptember 1st 2008, which is also my 23rd birthday, and Doctrine 2.0\nwill follow it exactly one year later on September 1st 2009.\n", + "date": "2008-05-11 00:00:00" }, { - "url": "/2011/11/23/doctrine-orm-2-1-4-released.html", - "slug": "doctrine-orm-2-1-4-released", - "title": "Doctrine ORM 2.1.4 released", - "authorName": "Benjamin Eberlei", - "authorEmail": "", - "contents": "I just released Doctrine ORM 2.1.4. The Doctrine ORM 2.1.3 release has a\nregression in the EntityManager\\#merge() method, which is fixed in this\nrelease. See the\n[changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10165).\n\nGet the package from [PEAR](http://pear.doctrine-project.org) ,\n[Downloads](https://www.doctrine-project.org/projects) or from\n[Github](https://github.com/doctrine/orm).\n", - "date": "2011-11-23 00:00:00" + "url": "/2014/09/11/orm-244.html", + "slug": "orm-244", + "title": "ORM 2.4.4 released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n2.4.4, which fixes a minor regression introduced by\n[DDC-2996](https://github.com/doctrine/orm/issues/3760).\n\nYou can find all the changes on JIRA:\n\n- [ORM\n 2.4.4](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10720)\n - 1 issue fixed\n\nYou can install the ORM using Composer and the following `composer.json`\ncontents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/orm\": \"2.4.4\"\n }\n}\n~~~~\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2014-09-11 00:00:00" }, { - "url": "/2008/05/31/0-11-0-rc3-released.html", - "slug": "0-11-0-rc3-released", - "title": "0.11.0-RC3 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "A little late, but the third release candidate of the 0.11.0 version of\nDoctrine has been released. This will be the last scheduled release\ncandidate before 0.11 becomes the latest stable version of Doctrine.\nThis release contains dozens of bug fixes and a few small enhancements.\nThe change log can be read here.\n", - "date": "2008-05-31 00:00:00" + "url": "/2015/01/15/cache-1-4-0.html", + "slug": "cache-1-4-0", + "title": "Cache 1.4.0 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine Cache\n1.4.0.\n\nThis release fixes a series of performance and compatibility issues in\nthe filesystem-based cache adapters\n([\\#16](https://github.com/doctrine/cache/pull/16),\n[\\#50](https://github.com/doctrine/cache/pull/50),\n[\\#55](https://github.com/doctrine/cache/pull/55)).\n\nNew cache adapters for `SQlite3`\n([\\#32](https://github.com/doctrine/cache/pull/32)) and `Predis`\n([\\#28](https://github.com/doctrine/cache/pull/28)) were implemented.\n\nA new `ChainCache` ([\\#52](https://github.com/doctrine/cache/pull/52))\nwas implemented, allowing multiple levels of caching, for performance\nand efficiency.\n\nNew interfaces were introduced, for better interface segregation and\nimproved performance:\n\n- `MultiGetCache` ([\\#29](https://github.com/doctrine/cache/pull/29))\n- `FlushableCache` ([\\#48](https://github.com/doctrine/cache/pull/48))\n- `ClearableCache` ([\\#48](https://github.com/doctrine/cache/pull/48))\n\nThis release also causes the filesystem-based caches to change directory\nstructure for saved files: please clear your file-based caches\ncompletely before upgrading.\n\nYou can find the complete changelog for this release in the [release\nnotes](https://github.com/doctrine/cache/releases/tag/v1.4.0).\n\nYou can install the Cache component using Composer and the following\n`composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"1.4.0\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2015-01-15 00:00:00" }, { - "url": "/2008/02/16/doctrine-0-9-1-0-10-1-released.html", - "slug": "doctrine-0-9-1-0-10-1-released", - "title": "Doctrine 0.9.1 / 0.10.1 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "Today the Doctrine team is proud to announce the release of Doctrine\n0.9.1 and 0.10.1. Both releases bring many fixes and a few minor\nadditions for missing features in each of the branches. The next release\nof 0.10.2 will replace the 0.9 branch and all users will be recommended\nto upgrade as the 0.9 branch will no longer be supported and maintained\nby the core dev team. We except that 0.10.2 is due in two to three\nweeks. Please upgrade your existing projects from 0.9 to 0.10 and let us\nknow what issues you come across when switching so we can ensure a\nsmooth migration from 0.9 to 0.10 for all of our users.\n\nOn a side note, many new changes have been made to the website. A few\nvisual things and a few functional things. You will now find on the\nDownload page you can now get Doctrine in either zip or tgz format. We\nalso have our very own PEAR server so you are able to install Doctrine\nvia the pear command line interface. Our channel is located at\npear.phpdoctrine.org and can be discovered by running 'pear\nchannel-discover pear.phpdoctrine.org'\n", - "date": "2008-02-16 00:00:00" + "url": "/2015/12/25/common-2-5-3-and-2-6-1.html", + "slug": "common-2-5-3-and-2-6-1", + "title": "Common 2.5.3 and 2.6.1 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine Common\n[2.5.3](https://github.com/doctrine/common/releases/tag/v2.5.3) and\n[2.6.1](https://github.com/doctrine/common/releases/tag/v2.6.1).\n\nCommon 2.5.3\n============\n\nThis release corrects an issue with the precedence of namespaces being\nmatched by the `SymfonyFileLocator`\n[\\#367](https://github.com/doctrine/common/pull/367).\n\nCommon 2.6.1\n============\n\nThis release includes all of the fixes reported above for 2.5.3.\n\nInstallation\n============\n\nYou can install the Common component using Composer and one of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/common\": \"~2.5.3\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/common\": \"~2.6.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/common/issues).\n", + "date": "2015-12-25 00:00:00" }, { - "url": "/2009/09/18/doctrine-1-2-0-alpha-released.html", - "slug": "doctrine-1-2-0-alpha-released", - "title": "Doctrine 1.2.0-ALPHA Released", - "authorName": "jwage", + "url": "/2013/05/11/doctrine-2-4-beta2.html", + "slug": "doctrine-2-4-beta2", + "title": "Doctrine 2.4 Beta2 released", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "Today I am happy to announce the immediate availability of Doctrine\n1.2.0 ALPHA1. As you all may already know, 1.2 will most likely be the\nlast 1.x version and is a LTS(long term support) release. We will post\nthe official support schedule once 1.2 is stable and released.\n\nYou can download Doctrine 1.2.0-ALPHA1 on the\n[download](https://www.doctrine-project.org/download) page just like\nnormal.\n\nThis release contains many changes, bug fixes and enhancements. Some of\nthem are highlighted below.\n\n- Removed string support from attributes system for performance\n increase\n- Cleaned up and removed deprecated code\n- Added ability to configure base Table, Query and Collection classes\n- Added ability to register custom hydrator and connection drivers\n- Enhanced Table magic finders to include conditions\n- Introduced Doctrine Extensions Repository\n- On Demand Hydration for better performance and less memory usage\n- Other various bug fixes, convenience enhancements and other minor\n performance improvements\n\nYou can view the full details of all the changes in the [upgrade\nfile](https://www.doctrine-project.org/upgrade/1_2). We use this to\ndocument all major changes so that upgrading is easier for you.\n", - "date": "2009-09-18 00:00:00" + "contents": "**11.05.2013**\n\nWe have released the second beta version of Doctrine 2.4. Some of the\nchanges are listed in [this\ntalk](https://speakerdeck.com/asm89/what-is-new-in-doctrine) by\nAlexander and me from Symfony Live Berlin last year.\n\nMost of the new functionality is already documented and marked with\n\"Since 2.4\". We will also prepare a blog post for the release that shows\nall the new functionality in one place.\n\nYou can find a list of changes on\n[Jira](https://www.doctrine-project.org/jira/issues/?jql=project%20in%20(DDC%2C%20DBAL%2C%20DCOM)%20AND%20fixVersion%20%3D%20%222.4%22%20AND%20status%20%3D%20Resolved%20ORDER%20BY%20priority%20DESC).\n\nYou can install the release with [Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.4.0-beta2\",\n \"doctrine/dbal\": \"2.4.0-beta2\",\n \"doctrine/common\": \"2.4.0-rc2\"\n }\n }\n\nPlease test this release with your existing applications to allow us to\nfind BC breaks and remove them before the final release. This will be\nthe last beta before Release Candidates will be created. We expect to\nneed only one RC and that the final release will follow shortly.\n\nYou should make yourself familiar with the UPGRADE documents, as we had\nto make some backwards compatibility breaks to fix nasty bugs:\n\n- [ORM](https://github.com/doctrine/orm/blob/master/UPGRADE.md)\n\n", + "date": "2013-05-11 00:00:00" }, { - "url": "/2008/09/09/doctrine-1-0-1-released.html", - "slug": "doctrine-1-0-1-released", - "title": "Doctrine 1.0.1 Released", + "url": "/2009/06/24/thank-you-servergrove.html", + "slug": "thank-you-servergrove", + "title": "Thank you ServerGrove", "authorName": "jwage", "authorEmail": "", - "contents": "Today we would like to announce the immediate availability of the first\nmaintenance release of the Doctrine 1.0 branch. This release contains\nseveral important bug fixes and we recommend that you upgrade as soon as\npossible. You can upgrade via pear or download the package here.\n", - "date": "2008-09-09 00:00:00" + "contents": "As you all may know, we recently\n[moved](https://www.doctrine-project.org/2009/06/16/doctrine-changing-homes.html)\nthe Doctrine infrastructure to a brand new home. This is all thanks to\n[ServerGrove](http://www.servergrove.net/). I contacted them a few\nmonths ago about potentially sponsoring us and they did not hesitate one\nbit. They were more than willing to setup a dedicated community server\nfor us, free of charge. Within 48 hours of my e-mail I had a dedicated\nserver ready to go. I had the server for about a month before I was able\nto make the move. They simply moved faster then I expected and have gone\nabove and beyond anything I could have imagined.\n\nIf you all need proper hosting support for your Symfony or Doctrine\nprojects, I would highly recommend them.\n", + "date": "2009-06-24 00:00:00" }, { - "url": "/2009/01/05/doctrine-1-0-6-released.html", - "slug": "doctrine-1-0-6-released", - "title": "Doctrine 1.0.6 Released", - "authorName": "jwage", + "url": "/2011/08/29/dbal-security-2011-1.html", + "slug": "dbal-security-2011-1", + "title": "Security releases 2.0.8 and 2.1.2", + "authorName": "beberlei", "authorEmail": "", - "contents": "Welcome Back\n============\n\nDon't worry! Doctrine is alive :) It has been a bit quiet around here\ndue to the holidays. I was able to take a week long vacation and it was\nvery nice being away from everything for the first time in almost three\nyears. I hope everyone enjoyed the holidays as much as I did.\n\n1.0.6 Released\n==============\n\nAnyways, on my first day back I am happy to introduce the freshly\npackaged Doctrine 1.0.6 bug fix release. This release contains dozens of\nfixes and the change log can be read\n[here](https://www.doctrine-project.org/change_log/1_0_6). It is strongly\nencouraged that you upgrade as soon as possible.\n\nDoctrine 1.1\n============\n\nOn a side note, we will be releasing the 2nd beta of 1.1 later this week\nand we have a few other surprises that will be a part of the 1.1 stable\nrelease. So, you will have to stick around to see what we have planned.\nYou can check out what is new in 1.1 by reading the\n[upgrade](https://www.doctrine-project.org/upgrade/1_1) file.\n", - "date": "2009-01-05 00:00:00" - }, - { - "url": "/2015/04/16/doctrine-module-release-0-8-1.html", - "slug": "doctrine-module-release-0-8-1", - "title": "Doctrine Module release 0.8.1", - "authorName": "Gianluca Arbezzano", - "authorEmail": "gianarb92@gmail.com", - "contents": "The **Zend Framework Integration Team** is happy to announce the new\nrelease of **DoctrineModule**. DoctrineModule `0.8.1` will be the last\nbugfix, it is the last version that will support PHP 5.3. Further\nversions of the `0.8.*` series may still be released in case of security\nissues.\n\nFollowing issues were solved in this release:\n: - [[\\#376] Bumping PHP and ZF2 dependencies, branch alias for\n master](https://github.com/doctrine/DoctrineModule/pull/376)\n - [[\\#378] I think this is a small PSR rule\n violation.](https://github.com/doctrine/DoctrineModule/pull/378)\n - [[\\#381] Update\n validator.md](https://github.com/doctrine/DoctrineModule/pull/381)\n - [[\\#388] Added exception for missing required parameter for\n find\\_method option\n as](https://github.com/doctrine/DoctrineModule/pull/388)\n - [[\\#390] Clarified how to pass sort\n information.](https://github.com/doctrine/DoctrineModule/pull/390)\n - [[\\#395] Issue with objects being cast to array in\n validators](https://github.com/doctrine/DoctrineModule/pull/395)\n - [[\\#397] Enhancement: use exit code from\n run()](https://github.com/doctrine/DoctrineModule/pull/397)\n - [[\\#401] Reading\n Inconsistency](https://github.com/doctrine/DoctrineModule/pull/401)\n - [[\\#391] UniqueObject Validator \\* allowing composite\n identifiers from context or\n not](https://github.com/doctrine/DoctrineModule/pull/391)\n - [[\\#400] let zf2 console return exit\n status](https://github.com/doctrine/DoctrineModule/pull/400)\n - [[\\#404] Fix form\n elements](https://github.com/doctrine/DoctrineModule/pull/404)\n - [[\\#406] Fix context\n unique](https://github.com/doctrine/DoctrineModule/pull/406)\n - [[\\#421] Make DoctrineObject use AbstractHydrator s\n namingStrategy](https://github.com/doctrine/DoctrineModule/pull/421)\n - [[\\#426] update year in\n license](https://github.com/doctrine/DoctrineModule/pull/426)\n - [[\\#436] Fixing typo and updating paginator link to ZF\n 2.3](https://github.com/doctrine/DoctrineModule/pull/436)\n - [[\\#450] minor cs\n fix](https://github.com/doctrine/DoctrineModule/pull/450)\n - [[\\#458] Update\n doctrine\\*module.php](https://github.com/doctrine/DoctrineModule/pull/458)\n - [[\\#462] Adding custom Doctrine\\*Cli\n Commands](https://github.com/doctrine/DoctrineModule/pull/462)\n - [[\\#465] Re*enable scrutinizer*ci code\n coverage](https://github.com/doctrine/DoctrineModule/pull/465)\n - [[\\#453] phpdoc\n fixes](https://github.com/doctrine/DoctrineModule/pull/453)\n\nTo install this version, simply update your \\`composer.json\\`:\n\n```json\n{\n \"require\": {\n \"doctrine/doctrine-module\": \"0.8.1\"\n }\n}\n```\n", - "date": "2015-04-16 00:00:00" + "contents": "It was brought to our attention that identifier quoting in Doctrine DBAL\nhas a potential security problem when user-input is passed into this\nfunction, making the security aspect of this functionality obsolete. We\nfixed as soon as we realized it and apologize for to our users for this\nerror.\n\nWe released versions 2.1.2 and 2.0.8 of DBAL that both contain a fix for\nthe problem. You can grab the code from\n[PEAR](http://pear.doctrine-project.org) ,\n[Github](https://github.com/doctrine/dbal) or the [Downloads\nsection](https://www.doctrine-project.org/projects/dbal/download).\n\nIf you make use of AbstractPlatform::quoteIdentifier() or\nDoctrine::quoteIdentifier() please upgrade immediately. The ORM itself\ndoes not use identifier quoting in combination with user-input, however\nwe still urge everyone to update to the latest version of DBAL.\n", + "date": "2011-08-29 00:00:00" }, { - "url": "/2013/05/11/doctrine-2-3-4.html", - "slug": "doctrine-2-3-4", - "title": "Doctrine 2.3.4 released", - "authorName": "Benjamin Eberlei", + "url": "/2009/12/01/more-doctrine-releases.html", + "slug": "more-doctrine-releases", + "title": "More Doctrine Releases", + "authorName": "jwage", "authorEmail": "", - "contents": "**11.05.2013**\n\nWe have released version 2.3.4 of Doctrine ORM and DBAL. We fixed as\nmuch as 18 DBAL tickets and 12 ORM tickets.\n\nSee a Changelog of both components:\n\n- [DBAL](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10421)\n- [ORM](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10420)\n\nYou can install the release with\n[PEAR](http://pear.doctrine-project.org) or with\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.4\",\n \"doctrine/dbal\": \"2.3.4\"\n }\n }\n", - "date": "2013-05-11 00:00:00" + "contents": "Only a few hours ago we released the stable version of Doctrine 1.2! Now\nwe bring you two maintenance releases for the 1.0 and 1.1 versions of\nDoctrine. The number of changes in these releases are small, but they\nare important bug fixes. It is recommended that you upgrade. Download\n[1.0.14](https://www.doctrine-project.org/download#1_0) and\n[1.1.6](https://www.doctrine-project.org/download#1_1) now and report any\nissues you discover in [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2009-12-01 00:00:00" }, { "url": "/2021/03/29/dbal-2.13.html", @@ -513,301 +414,220 @@ "date": "2021-03-29 00:00:00" }, { - "url": "/2009/03/02/doctrine-1-0-8-and-1-1-0-rc2-released.html", - "slug": "doctrine-1-0-8-and-1-1-0-rc2-released", - "title": "Doctrine 1.0.8 and 1.1.0-RC2 Released", + "url": "/2010/08/24/doctrine-orm-version-1-2-3-released.html", + "slug": "doctrine-orm-version-1-2-3-released", + "title": "Doctrine ORM Version 1.2.3 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am happy to tell you that we have two new versions of Doctrine\navailable for you to use. The first is the monthly maintenance release\nfor Doctrine 1.0 and the second is another release candidate for the\nnewest major version of Doctrine, 1.1. As always you can grab them from\nthe [downloads](https://www.doctrine-project.org/download) page.\n\n1.0.8 Highlights\n================\n\n- Backported a few fixes from 1.1\n- Several fixes and optimizations to Doctrine\\_Query::count()\n- Dozens and dozens of other small fixes\n\nYou can read the full change log for the 1.0.8 release\n[here](https://www.doctrine-project.org/change_log/1_0_8).\n\n1.1.0-RC2 Highlights\n====================\n\n- Fixed issue with migration diff not paying attention to table\n options\n- Made the SoftDelete behavior backwards compatible with 1.0\n- Several fixes and optimizations to Doctrine\\_Query::count()\n- Fixed duplicated params when using LIMIT/OFFSET under MySQL\n- Fixed issue with new utf8 search analyzer\n- Fixed issue with prefixes causing invalid results in the migration\n diff tool\n- Fixed issues that arrise when re-using query objects with DQL\n callbacks enabled.\n\nYou can read the full change log for the 1.1.0-RC2 release\n[here](https://www.doctrine-project.org/change_log/1_1_0_RC2).\n\n\n\nThree years after the launch of symfony as an Open-Source project,\nSensio Labs is very proud to announce its new offices in the USA.\n\n
\n\nTo celebrate, we organize our first symfony training in Atlanta between\nOctober 29th and 31th. The training will be based on the latest symfony\n1.1 and will be held in Atlanta (at the \"1230 Peachtree St N.E.\nPromenade II\").\n\n
\n\nThis symfony workshop will be given by a symfony expert coming from\nFrance and Jonathan Wage, the Doctrine lead developer, and a seasoned\nsymfony developer.??A symfony workshop is an interactive training\nsession during which you will learn how to develop high-quality web\napplications fast and efficiently with symfony. After three days of\nsymfony immersion, guided by Sensio experts sharing their knowledge and\nexperience, you will know enough techniques and methodology to become\nfluent in agile web development with symfony. You can find more\ninformation and subscribe online on our website.\n\n
\n\nIf you want more information, feel free to contact Nicolas Blin at\nNicolas.blin [at] sensio.com.Sensio Labs\n\n
\n\nSensio Labs helps its customers with their Internet strategy and\ndevelops their applications around the best Open-Source frameworks.\n\n
\n\nSensio Labs created symfony a Web application framework in PHP. Sensio\nLabs plays a major role in the Open-Source world. The company has 10\nyears of experience in development of high value web applications with\nmore than 500 projects for key accounts in many countries.\n\n
\n\n\n", - "date": "2008-10-02 00:00:00" - }, - { - "url": "/2019/09/30/mongodb-odm-1.3.0-and-2.0.0-RC2.html", - "slug": "mongodb-odm-1.3.0-and-2.0.0-RC2", - "title": "Doctrine MongoDB ODM 1.3.0 and 2.0.0-RC2 released", - "authorName": "Andreas Braun", - "authorEmail": "alcaeus@doctrine-project.org", - "contents": "The Doctrine team is proud to announce that MongoDB ODM 1.3.0 and 2.0.0-RC2 have\nbeen released. These releases are the culmination of a long effort to migrate\nthe ODM away from the legacy `mongo` extension to the new MongoDB driver\n(`mongodb` extension and PHP library). This results in a number of BC breaks for\nusers, but will enable us to add many new features in future releases, among\nthem support for multi-document transactions.\n\nMongoDB ODM 1.3.0 is a compatibility release targeted for users of the legacy\nextension that want to migrate to MongoDB ODM 2.0. It helps identify BC breaks\nby throwing deprecation notices and offering a forward compatibility layer where\npossible. To efficiently find usages of deprecated code, you can use the PHPUnit\nbridge developed by Symfony\n([symfony/phpunit-bridge](https://github.com/symfony/phpunit-bridge)) which logs\nall deprecation notices encountered during a run of PHPUnit. You can read more\nabout this component in the\n[Symfony documentation](https://symfony.com/doc/current/components/phpunit_bridge.html).\n\nMongoDB ODM 2.0.0RC-2 is the recommended package to use for those starting new\nprojects with MongoDB ODM. It ensures that you use the modern API for ODM\nwithout having to worry about deprecations. While this is still a release\ncandidate, it is planned to make this version the next stable MongoDB ODM\nrelease.\n\nWhat\u2019s new in MongoDB ODM 2.0?\n==============================\n\nMost importantly, this version no longer uses the legacy `mongo` extension. That\nextension is no longer maintained and does not support server versions beyond\nMongoDB 3.0. The new MongoDB driver ensures that MongoDB ODM can leverage\nfeatures and improvements contained in newer MongoDB versions, such as support\nfor multi-document transactions, retryable reads, retryable writes, change\nstreams, and much more.\n\nChanging the driver also means significant changes to some APIs. Most\nimportantly, the GridFS API has been rewritten from scratch to conform with\nMongoDB\u2019s GridFS spec for drivers. If you\u2019ve used GridFS before, this will be a\nbig change for you, but the new API is much simpler and cleaner to use. Check\nout the\n[GridFS documentation](https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/storing-files-with-mongogridfs.html#storing-files-with-gridfs)\nto find out how to use the new API. Unfortunately, we cannot provide a forward\ncompatibility layer for this, as re-implementing this API atop the legacy driver\nis not feasible.\n\nLazy reference support has been changed completely and no longer uses proxy\nobjects from the deprecated doctrine/common library. Instead, it builds on\n`ocramius/proxy-manager`, which gives us access to more advanced features like\npartial proxy loading, which we will start leveraging in future releases.\n\nIn 2.0 we dropped support for the YAML mapping of documents. This step was\nnecessary to both reduce the complexity of the code base and lower the burden of\nmaintaining multiple mapping drivers. If you are currently using YAML mappings,\nwe provide a console command to migrate YAML mappings to the XML format. We are\ncurrently working on an alternative that allows for a more flexible mapping\nconfiguration system, but this is not ready yet and will only be provided in a\nfuture 2.x release.\n\nMigrating to MongoDB ODM 2.0\n============================\n\nIf you are using MongoDB ODM 1.x, the upgrade consists of multiple steps. First,\nensure that you are fulfilling the necessary requisites for MongoDB ODM 2.0:\n* PHP version 7.2 or newer\n* ext-mongodb 1.5.0 or newer\n* mongodb/mongodb library 1.4.0 or newer\n* MongoDB 3.0 or newer\n\nIf you are already running PHP 7, you will most likely already be running\next-mongodb as the legacy extension is not available for PHP 7. If you are still\nrunning PHP 5.x, it is recommended that you migrate to PHP 7 before attempting\nto use a newer ODM version. You can do so by following the instructions on\nrunning ODM 1.x on PHP 7.\n\nOnce you fulfill all dependencies, the first step is updating to the latest 1.3\nrelease of MongoDB ODM. If you are using Symfony, you also need to upgrade the\nODM bundle to its latest\n[3.6 version](https://github.com/doctrine/DoctrineMongoDBBundle/releases/tag/3.6.0).\nOnce this is done, you can start fixing any deprecation notices that you find.\nThis should be a familiar process for any existing Symfony users. We tried to\nprovide compatibility layers where possible; unfortunately, we could not do so\nin all cases.\n\nThe next step is upgrading to ODM 2.0 directly. For many users, this step\nshouldn\u2019t be a problem thanks to the compatibility layer in 1.x. There may be\nsome necessary changes depending on the features you use (e.g. GridFS).\n\nWhat\u2019s next for MongoDB ODM\n===========================\n\nDuring the past few years, we focussed our limited development time almost\nexclusively on the driver migration, which came at the expense of supporting new\nfeatures in MongoDB. We plan to add support for many of those features in future\nreleases. You can get an overview of what\u2019s planned by checking the roadmap. If\nyou are looking for a specific feature, please let us know in the issue tracker.\n\nWhile not exhaustive or guaranteed, these are some of the features we plan to\nimplement in future releases:\n* Support for multi-document transactions (on-demand and implicit while flushing\n the Document Manager)\n* Support for new aggregation pipeline stages and operators\n* Support for the $expr query operator\n* Support for aggregation pipelines in update operations\n* Support for reading documents from views instead of collections\n* Atomic updates for collections using new array update operators\n\nSupport timeline\n================\n\nWith these releases, we\u2019re also introducing our new support timeline. Along with\nthe two releases announced above, we are also releasing the end-of-life release\nfor MongoDB ODM 1.2. We will not support MongoDB ODM 1.2 any more and encourage\nusers to upgrade to 1.3. Since 1.3 has no additional requirements over 1.2,\nupgrading should be possible for all users of ODM 1.2.\n\nMongoDB ODM 1.3 will be supported for at least 6 months after the first stable\nrelease of ODM 2.0. We will communicate this date when releasing ODM 2.0. After\nthose 6 months, we will either drop support for ODM 1.3 or extend it for another\n3 months, depending on the adoption rate of ODM 2.0. We are aware that the\nnumber and kind of BC breaks for 2.0 pose a significant challenge for many\nusers, which is why we don\u2019t want to force people to rush into this update.\n\nDuring the support phase for MongoDB ODM 1.3, we will also continue to provide\nbug fixes to the MongoDB Abstraction Layer that is used by MongoDB ODM 1.x. This\nproject will reach end-of-life at the same time as MongoDB ODM 1.3, and will no\nlonger be supported beyond that. We encourage users that depend on this library\nto switch to using the MongoDB PHP Library, which is part of the official\nMongoDB driver for PHP.\n\nContributing to MongoDB ODM\n===========================\n\nWe are currently looking for contributors. This doesn\u2019t necessarily mean\nimplementing new features or merging pull requests. Reporting or triaging\nissues, requesting features, and reporting bugs are all extremely important and\nhelps us deliver better software!\n\nGetting help\n============\n\nThe documentation can be found on the website:\nhttps://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/index.html.\nTo get support, contact us via the #mongodb-odm channel within the Doctrine\nSlack. If you believe you have found a bug, please file a bug report on GitHub.\n", - "date": "2019-09-30 00:00:00" + "contents": "Thanks to Phuson we have a brand new design that is absolutely\nspectacular. Now we have a design that is on the same level of Doctrine\nitself. We all owe him a big thanks.\n", + "date": "2007-12-08 00:00:00" }, { - "url": "/2010/08/07/dc2-experimental-associations-id-fields.html", - "slug": "dc2-experimental-associations-id-fields", - "title": "Experimental Doctrine 2 Feature: Associated Entities as Id Fields", - "authorName": "beberlei", + "url": "/2009/11/23/new-doctrine-core-team-member.html", + "slug": "new-doctrine-core-team-member", + "title": "New Doctrine Core Team Member", + "authorName": "jwage", "authorEmail": "", - "contents": "Doctrine 2 supports composite keys of primitive types from the\nbeginning, however we realized early that a very common use-case is a\ncomposite key with one or more elements being associated entities. For\nexample think of a CMS System which allows Article Translations. A\ncommon SQL schema for this case would be:\n\n [sql]\n CREATE TABLE article (id INT PRIMARY KEY, title VARCHAR(255), body LONGTEXT);\n\n CREATE TABLE article_translations (article_id INT, language CHAR(3), title VARCHAR(255), body LONGTEXT, PRIMARY KEY (article_id, language));\n\nThis sort of schema cannot be mapped with Doctrine 2 currently, it would\nbe required to add another column `id` on the article\\_translations\ntable and enforce a unique constraint on article\\_id + language.\n\nUnder the umbrella of\n[DDC-117](https://github.com/doctrine/orm/issues/1772) and some\nrelated tickets there were discussions about adding a feature that would\nhelp solve this problem: Allowing to add @Id to @ManyToOne or @OneToOne\nmappings. I committed this feature into an experimental Git branch today\nand we ask you to test this with as many crazy scenarios and use-cases\nas possible.\n\nThis feature can potentially be uber-powerful, however we want to be\nsure that it works correctly and does not have to many problematic\nedge-cases. Therefore we need your feedback.\n\n- Go to\n [[https://github.com/doctrine/orm/commits/DDC-117](https://github.com/doctrine/orm/commits/DDC-117)](https://github.com/doctrine/orm/commits/DDC-117)\n to see the code\n- [Have a look at the functional\n tests](https://github.com/doctrine/orm/blob/master/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php)\n to see the synatx\n- Checkout the Git Repository and switch to the experimental branch\n `git checkout DDC-117`\n- Do crazy testing against this branch!\n\nPersonally I want this feature in core very much, however composite keys\nare very tricky. We want to find as many problematic cases with this\nfeature as possible. That would enable us to evaluate if this approach\nwill be merged into Doctrine 2.1 or not.\n\n> **NOTE**\n>\n> This feature currently only works with Annotations Mapping Driver. XML\n> and YAML will follow later.\n\nBy the way, the previous example is actually one of the functional\ntest-cases for this feature:\n\n~~~~ {.sourceCode .php}\ntitle = $title;\n $this->translations = new \\Doctrine\\Common\\Collections\\ArrayCollection();\n }\n}\n\n/**\n * @Entity\n */\nclass DDC117Translation\n{\n /**\n * @Id @ManyToOne(targetEntity=\"DDC117Article\")\n */\n private $article;\n\n /**\n * @Id @column(type=\"string\")\n */\n private $language;\n\n /**\n * @column(type=\"string\")\n */\n private $title;\n\n public function __construct($article, $language, $title)\n {\n $this->article = $article;\n $this->language = $language;\n $this->title = $title;\n }\n}\n\n$article = new DDC117Article(\"foo\");\n$em->persist($article);\n$em->flush();\n\n$translation = new DDC117Translation($article, \"en\", \"Bar\");\n$em->persist($translation);\n$em->flush();\n~~~~\n", - "date": "2010-08-07 00:00:00" + "contents": "Today I am very excited to announce to you all that we have officially\ninvited Benjamin Eberlei, also known as beberlei in IRC, to join the\ncore Doctrine team. He has steadily contributed to Doctrine 2 and has\nbeen very helpful. We are confident that he will be a great new addition\nto the team.\n\nBenjamin is a contributor to the Zend Framework as well so he will be\nresponsible for leading the integration between the projects. You can\nread a little more about Benjamin on his [about\npage](https://www.doctrine-project.org/contributor/beberlei).\n", + "date": "2009-11-23 00:00:00" }, { - "url": "/2011/08/26/doctrine2-1-1.html", - "slug": "doctrine2-1-1", - "title": "DBAL and ORM 2.1.1 maintenance releases", - "authorName": "beberlei", + "url": "/2014/12/04/doctrine_dbal_2_5_release.html", + "slug": "doctrine_dbal_2_5_release", + "title": "Doctrine DBAL 2.5 Release", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "We released the DBAL and ORM 2.1.1 maintenance versions today that\nseveral issues with both packages. You can see the changelog of both\npackages on Jira:\n\n- [ORM Changelog (22 issues\n fixed)](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10153)\n- [DBAL Changelog (4 issues\n fixed)](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10156)\n\nPlease report any problems with these packages to the Jira tracker or\nthe mailing list.\n\nYou can download the packages through PEAR or our download sections\nwithin each project.\n", - "date": "2011-08-26 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n2.5.0 Stable. This release is a landmark in making DBAL more consistent\nand stable than it ever was.\n\nStarting with 2.5 DBAL will have a new release-master, [Steve\nM\u00fcller](https://github.com/deeky666). Steve has been working on DBAL for\nthe last two years and contributed many of the big features that make up\nthis fantastic release. He will replace Benjamin Eberlei who was the\nrelease master since version 2.0.\n\nYou can install DBAL through Composer:\n\nThis version is mostly backwards compatible with only some minor breaks,\nwhen using PDO IBM, creating a custom platform or using non-default\nDateTime formats. You can see the breaks in the\n[UPGRADE.md](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\nfile. DBAL 2.5 is also compatible with ORM 2.4, there is no need to wait\nfor ORM 2.5 to be released.\n\nThe following list contains the major new features of DBAL:\n\n- Support for SAP Sybase SQL Anywhere versions 10, 11, 12 and 16\n (DBAL-475)\n- Support for auto-commit=NO on all drivers and platforms. (DBAL-81)\n- Refactor exceptions to use common error-codes and exception classes\n that derive from `Doctrine\\DBAL\\DBALException`. (DBAL-407)\n- Add support to retry connections with\n `Doctrine\\DBAL\\Connection#ping()` method. (DBAL-275)\n- Add INSERT support to QueryBuilder (DBAL-320)\n- Add Binary type for VARBINARY support (DBAL-714)\n- Add charset and SSL connection support to PostgreSQL (DBAL-567,\n DBAL-702)\n- Add options support for Myqli (DBAL-643)\n- Add support for using database uris with the `url` parameter in\n `DriverManager::getConnection()` which supports several forms used\n by PaaS providers out of the box (DBAL-1050).\n- Auto detection of platform to use based on database (DBAL-757)\n- Improved SQL Server LIMIT emulation support. (Multiple tickets)\n- Improvements to HHVM Support (no full support yet)\n\nSee all the changes for the 2.5.0 Release on Jira, an amazing total of\n316 issues:\n\n- [DBAL\n 2.5.0](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10523/)\n\nIf you find any problems or backwards compatibility breaks with this\nrelease please report them on JIRA or open up Pull Requests on Github.\n", + "date": "2014-12-04 00:00:00" }, { - "url": "/2008/09/23/doctrine-at-latino-ware-2008.html", - "slug": "doctrine-at-latino-ware-2008", - "title": "Doctrine at LatinoWare 2008", - "authorName": "guilhermeblanco", + "url": "/2008/10/26/symfony-doctrine-schema-manager.html", + "slug": "symfony-doctrine-schema-manager", + "title": "symfony Doctrine Schema Manager", + "authorName": "jwage", "authorEmail": "", - "contents": "", - "date": "2008-09-23 00:00:00" + "contents": "As you all probably know, Doctrine has been tightly integrated with [a\nfew](http://trac.doctrine-project.org/wiki/integrate) different PHP\nframeworks. Since symfony was my choice of framework a few years back, I\nhave dedicated a lot of time towards working on the integration between\nthe two.\n\nSomething I've always thought would be fun to build and has been one of\nthe most requested items by users is a nice web based interface for\nmanaging your schema and generate your models from it. With the [new\nform\nframework](https://symfony.com/blog/spice-up-your-forms-with-some-nice-widgets-and-validators)\nas of [symfony\n1.1](https://symfony.com/blog/the-wait-is-over-symfony-1-1-released)\n, you can build rich forms with a nice OOP interface. This made it\nextremely easy to make the schema manager feature of the\n[sfDoctrineManagerPlugin](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin).\nIt was as simple as automatically generating a set of forms from the\nschema information data structure inside of Doctrine.\n\n[![sfDoctrineManagerPlugin](http://www.symfony-project.org/uploads/plugins/5e25c2c7775a8ed169e2d9a6de8e2d1d98ffd110.png)](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin)\n\nThis symfony plugin allows you to manage all your schema information\nfrom a nice web based interface. You can create new schemas or load your\nexisting schemas to edit. More information about it as well as screen\nshots can be found\n[here](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin).\n", + "date": "2008-10-26 00:00:00" }, { - "url": "/2016/01/05/orm-2-5-4.html", - "slug": "orm-2-5-4", - "title": "Doctrine ORM 2.5.4 Released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine ORM\n[2.5.4](https://github.com/doctrine/orm/releases/tag/v2.5.4).\n\nThis release fixes an issue with how identifiers are used when building\nsecond level cache entries during hydration.\n[\\#1568](https://github.com/doctrine/orm/pull/1568)\n\nInstallation\n============\n\nYou can install the ORM component using Composer:\n\n```bash\ncomposer require doctrine/orm:~2.5.4\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/orm/issues).\n", - "date": "2016-01-05 00:00:00" + "url": "/2012/01/30/doctrine-2-1-6.html", + "slug": "doctrine-2-1-6", + "title": "DBAL/ORM 2.1.6 released", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "We released a new round of maintenance releases for the 2.1 branch. DBAL\nand ORM are now in version 2.1.6 of their lifecycle. There have been 8\nbug fixes in ORM and 8 in DBAL. See the changelogs:\n\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10182)\n- [DBAL\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10181)\n\nAs usual code is available via Download, PEAR, Packagist/Composer or\nfrom Github.\n", + "date": "2012-01-30 00:00:00" }, { - "url": "/2015/10/28/cache-1-4-3_and-1-5-0.html", - "slug": "cache-1-4-3_and-1-5-0", - "title": "Cache 1.4.3 and 1.5.0 Released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.4.3](https://github.com/doctrine/cache/releases/tag/v1.4.3) and\n[1.5.0](https://github.com/doctrine/cache/releases/tag/v1.5.0).\n\nCache 1.4.3\n===========\n\nThis release fixes some minor issues that prevented various cache\nadapters from correctly reporting success or failure in case of cache\nkey deletion ([\\#95](https://github.com/doctrine/cache/pull/95)).\n\nAnother issue being fixed is related to `CacheProvider#fetchMultiple()`,\nwhich was failing to operate when an empty list was given to it\n([\\#90](https://github.com/doctrine/cache/pull/90)).\n\nAlso, the `CacheProvider` does not store version information internally\nunless `CacheProvider#deleteAll()` was called at least once\n([\\#91](https://github.com/doctrine/cache/pull/91)).\n\nYou can find the complete changelog for this release in the [v1.4.3\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.4.3).\n\nCache 1.5.0\n===========\n\nThis release includes all the changes released with version 1.4.3, as\nwell as further bug fixes and improvements that will require you to\nclean your caches (if file-based) during the upgrade.\n\nPHP7 support is now guaranteed\n([\\#92](https://github.com/doctrine/cache/pull/92)).\n\nFile based caches now use a much lower number of directories\n([\\#94](https://github.com/doctrine/cache/pull/94)).\n\nProper support for wincache multi-get was added\n([\\#97](https://github.com/doctrine/cache/pull/97)).\n\nPredis cache adapter now relies on the `Predis\\ClientInterface`\n([\\#87](https://github.com/doctrine/cache/pull/87)).\n\nYou can find the complete changelog for this release in the [v1.5.0\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.5.0).\n\nCredits\n=======\n\nWe would like to thank all contributors that patiently supported us in\nfixing the file-based cache directory structure long-standing issues,\nand especially:\n\n> - Tobias [Tobion](https://github.com/Tobion) Schultze\n> - Krzysztof [Crozin](https://github.com/Crozin) \u0141abu\u015b\n> - Steve [kamermans](https://github.com/kamermans) Kamerman\n\nInstallation\n============\n\nYou can install the Cache component using Composer either of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.4.1\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.5.0\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-10-28 00:00:00" + "url": "/2010/11/18/doctrine2-behavioral-extensions.html", + "slug": "doctrine2-behavioral-extensions", + "title": "Doctrine2 Behavioral Extensions", + "authorName": "gmorkevicius", + "authorEmail": "", + "contents": "These behavioral extensions will give you another view on Doctrine2\ncapabilities handling behaviors through the EventListeners. These\nextensions operate like some of the most commonly used behaviors,\nleaving the domain objects as clean as possible. Annotations makes it\neasy to understand an intended behavior of properties on your Entities.\n\n\n\nHi, my name is Gediminas Morkevicius, I have 4 year experience in C++\nand PHP 5 and I'm very keen on new technologies and Doctrine2 is one of\nthem. Development is not only a job for me, but it is my lifestyle and\nI'm pleased to give some love back to Doctrine2.\n\n
\n\n\nI would like to thank Doctrine2 and Symfony2 teams for these wonderful\nprojects. They have great potential.\n\n
\n\n\nI have been using php.net style API lookups ever since I can remember.\nIt is very nice being able to simply go to https://secure.php.net/array\\_walk\nand have it pull up that function in the PHP API Documentation. So,\ntonight i have implemented this functionality in to the Doctrine\nwebsite. Below are some examples of how you can quickly access the API\ndocs for a specific function or class.\n\n
\n\nToday we have released a new version, 0.11.1. As with all point releases\nit is a bug fix only release. With over 81 tickets closed, this is\ndefinetly a significant release for Doctrine towards 1.0. We recommend\nthat you upgrade.\n\n
\n\nWe have also created the 1.0 branch and will begin actively working on\nit. We have hit the final straight away towards 1.0! This was originally\nslated to be the 0.12 branch but we feel it is ready and we will spend\nthe next 2 months furiously working on tickets before we release it on\nSeptember 1st. We will have some short intermediate BETA and RC releases\nbefore then but these will primarily be bug fix releases only. Make some\nhype please, thanks. ;)\n\n
\n\n\n", - "date": "2008-07-12 00:00:00" - }, - { - "url": "/2010/08/18/mongodb-odm-1-0-0beta1-released.html", - "slug": "mongodb-odm-1-0-0beta1-released", - "title": "MongoDB ODM 1.0.0BETA1 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "Today I am happy to tell you we have released the first beta version of\nthe MongoDB Object Document Mapper. It contains many fixes and general\nimprovements across the code.\n\nWe fixed lots of things reported by our users in Jira but also made lots\nof other improvements like improving the use of atomic operators. Read\non for a complete list of the issues fixed in Jira:\n\nFixed Jira Issues\n=================\n\n\n\nToday I am extremely happy to introduce the first stable version of\nDoctrine, 1.0.0. If you've been around for a while, then you know this\nis a long time coming. We've been hard at work on Doctrine for nearly 3\nyears and it is finally time to release a version we will support with\nbug fix releases every month. This 1.0 release will be maintained until\nMarch 1st 2010. Now we have 1.0, what is next? Below are some highlights\nof what to expect in the future of Doctrine.\n\n
\n\nWhat are you waiting for? Download Doctrine 1.0 now and give it a try.\nCheck out the Cookbook and Manual to help you get started. The My First\nProject Tutorial is good for just getting started and getting your feet\nwet.\n\n
\n\n\n", - "date": "2008-09-01 00:00:00" + "contents": "When using Doctrine in a project it is always a security critical\ncomponent because it talks directly to your database. As such security\nis very important to us. In security however, context is important and\nproviding you with query capabilities we have to expose you to the risk\nof SQL injections.\n\nDoctrine cannot prevent you from building SQL injections into your\napplications and so can no other DBAL, because it would require hiding\nSQL completely. But hiding SQL completely is not wanted, because it is\nsuch a powerful language.\n\nTherefore it is still your responsibility to make sure that you are\nusing Doctrine correctly when working with SQL.\n\nBut how would you know how to do so? Until now we had some small bits\nabout security here and there in the documentation, mostly in the\nchapters about Query objects. We came to the conclusion that this is not\nenough.\n\nThat conclusion sinked in with a security issue we became aware of last\nmonth, where one Doctrine user reported that one of the core\n`Doctrine\\DBAL\\Connection` APIs is supposedly vulnerable to SQL\ninjection. When you use `$connection->insert($tableName, $values)`, then\nboth the table name and the keys (columns) of the `$values` array are\nnot escaped, because we assume they are never user input.\n\nWe evaluated this issue together with [Padraic\nBrady](http://blog.astrumfutura.com/) (a known PHP security researcher)\nand came to the conclusion that this is not a security issue for us.\nWhy? Because we don't think this part of the API can be secured and\ntrying will make our users feel safe, when they are not. Using the DBAL\nAPIs directly always posed a much higher risk than using just the ORM.\n\nYou might think we are nuts by just claiming a non issue, but consider\nthe assumptions we make about tables and columns and our reasoning:\n\n- Quoting identifiers is bad, because it changes them from\n case-insensitive to case-sensitive. Even more weird, Oracle unquoted\n identifiers are uppercased, PostgreSQL unquoted identifiers are\n lowercased. MySQL casing is based on a config option. Doctrine 1.\\*\n had various unfixable bugs because of identifier quoting, which is\n why we decided that Doctrine will not use automatic identifier\n quoting.\n\n- The APIs of `Connection#insert()`, `Connection#update()` and\n `Connection#delete()` therefore accept both quoted and unquoted\n table/column identifiers, because quoting is the users choice.\n\n- A mechanism to detect SQL injection in strings that can be either\n quoted or unquoted is impossible to write completely secure. There\n are too many edge cases to consider and there is a realistic chance\n to miss one of them.\n\n- If you provide an API that is just secure in 99.999% of all cases,\n then you should not claim it is secure at all.\n\nAt this point you can still think we are wrong releasing insecure\nsoftware, however let me ask back: Isn't PHP shipping insecure software\nby providing PDO? SQL injection is possible by using PDO wrong. I can\nenumerate lots of libraries where security is the developers\nresponsibility: Template engines, authentication libraries and so on.\n\nA proper secured system requires knowledge about the context. That is\nwhy any kind of database abstraction layers can never fully protect you\nfrom SQL injection, because it does not know the context you are using\nit in.\n\nTo avoid secret knowledge about our security assumptions we are now\nstarting to be completely explicit about these issues. Both DBAL and ORM\nnow contain a \\`SECURITY.md\\` file, which contains basic information\nabout security and links to much more detailed documentation chapters on\nDoctrine security.\n\nWe have made an effort to list all the functions and operations that are\nsafe from SQL injection. There are not very many of them in the DBAL,\nbecause it is such a low level library. The ORM however is pretty\nsecure, except when concatenating user input into DQL and SQL queries.\n\nRead all the information about Security in Doctrine in the\ndocumentation.\n\n- [DBAL\n Security](https://www.doctrine-project.org/projects/doctrine-dbal/en/current/reference/security.html)\n- [ORM\n Security](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/security.html)\n\n", + "date": "2014-02-21 00:00:00" }, { - "url": "/2008/10/19/the-bleeding-edge-website-upgraded.html", - "slug": "the-bleeding-edge-website-upgraded", - "title": "The Bleeding Edge: Website Upgraded", + "url": "/2008/03/28/0-10-4-released-46-closed-tickets.html", + "slug": "0-10-4-released-46-closed-tickets", + "title": "0.10.4 Released - 46 Closed Tickets", "authorName": "jwage", "authorEmail": "", - "contents": "This weekend I decided it was time to completely dive in to the\nawesomeness that is [symfony](http://www.symfony-project.com) 1.2. I\nupgraded the Doctrine website to 1.2 as well as Doctrine 1.1. I had\nseveral schema changes that I migrated to production with the new\n[Migrations\nfeatures](https://www.doctrine-project.org/2008/10/18/new-to-migrations-in-1-1.html)\nthat were mentioned previously on the blog. It made the upgrade of the\nwebsite much easier. The primary motivation for diving in to this was a\nblog post made on\n[10/18/2008](https://symfony.com/blog/spice-up-your-forms-with-some-nice-widgets-and-validators)\nand\n[10/14/2008](https://symfony.com/blog/new-in-symfony-1-2-make-your-choice)\nwhere Fabien talks about forms in symfony 1.2.\n\nBelow is an overview of some of the changes made.\n\n- Upgraded to symfony 1.2\n- Upgraded to Doctrine 1.1\n- New backend control panel for administering the content of the\n website\n- Single Sign-On(SSO) - We now have partial SSO. Trac and the main\n website authentication are shared now. The forum will be integrated\n soon.\n- New groundwork started for several new website features, new\n documentation, user contributed documentation, user contributed\n packages! and more.\n\nHere are some screen shots of the backend magic that was generated by\nsymfony. I didn't have to do much and in one evening we have a new\ncontent management system backend for the website.\n\nDoctrine Releases\n=================\n\nThe style and custom icons in this list of the available Doctrine\nreleases were added thanks to my custom theme built specifically for the\nDoctrine backend.\n\n![Doctrine Releases\n](https://www.doctrine-project.com/uploads/assets/api_release_list.png)\n\nEdit User SVN Access\n====================\n\nThanks to the symfony form framework I was able to easily add a custom\nwidget for editing the website users svn access for all the different\nDoctrine versions.\n\n![Edit User SVN Access\n](https://www.doctrine-project.com/uploads/assets/edit_user_svn_access.png)\n\nDoctrine Release Points\n=======================\n\nList of all the Doctrine sub-release points.\n\n![Doctrine Release Points\n](https://www.doctrine-project.com/uploads/assets/api_release_points_list.png)\n\nEdit Doctrine Release\n=====================\n\nEdit a Doctrine release and control its stability as well as other\ninformation.\n\n![Edit Doctrine Release\n](https://www.doctrine-project.com/uploads/assets/edit_api_release.png)\n\nEdit Blog Post\n==============\n\nEdit a blog post entry using markdown syntax.\n\n![Edit Blog\nPost](https://www.doctrine-project.com/uploads/assets/edit_blog_post.png)\n", - "date": "2008-10-19 00:00:00" + "contents": "Today we would like to announce the 0.10.4 release. This release\naddresses 46 tickets and is a major step in stabilizing the 1st\ngeneration of Doctrine for the 1.0 release. We will continue with bug\nfix only releases until we feel the 0.10 branch is ready for a 1.0\ntitle. Give it a try and give us some tickets and failing test cases to\nfix :)\n\nYou can checkout the change log for the 0.10.4 release as well as\nprevious releases here.\n", + "date": "2008-03-28 00:00:00" }, { - "url": "/2011/03/20/doctrine-security-fix.html", - "slug": "doctrine-security-fix", - "title": "Security Fix: Upgrade to 1.2.4 and 2.0.3 immediately", + "url": "/2010/12/12/doctrine2-orm-rc2-released.html", + "slug": "doctrine2-orm-rc2-released", + "title": "Doctrine DBAL RC5 and ORM RC2 released", "authorName": "beberlei", "authorEmail": "", - "contents": "Because of a SQL injection possibility we urge users of Doctrine 1.2 and\n2 to the newly released versions of both libraries immediately. Both\nversions only include the security fix and no other changes to their\nprevious versions 1.2.3 and 2.0.2.\n\nAffected versions are:\n\n- 1.2.3 and earlier for PostgreSQL and DB2 Dialects\n- 2.0.2 and earlier\n\nThe security hole was found today and affects the\n`Doctrine\\DBAL\\Platforms\\AbstractPlatform::modifyLimitQuery()` function\nwhich does not cast input values for limit and offset to integer and\nallows malicious SQL to be executed if these parameters are passed into\nDoctrine 2 directly from request variables without previous cast to\ninteger. Functionality building on top using limit queries in the ORM\nsuch as `Doctrine\\ORM\\Query::setFirstResult()` and\n`Doctrine\\ORM\\Query::setMaxResults()` are also affected by this security\nhole.\n\nYou can grab the packages from PEAR, Archive or Github, see the\nrespective links more details:\n\n- [ORM](https://www.doctrine-project.org/projects/orm/download)\n- [DBAL](https://www.doctrine-project.org/projects/dbal/download)\n\nThe fix for this security hole breaks backwards compatibility for\ndevelopers that extend the\n`Doctrine\\DBAL\\Platforms\\AbstractPlatform::modifyLimitQuery()` method,\nbecause it is now marked as final. Please overwrite the\n`Doctrine\\DBAL\\Platforms\\AbstractPlatform::doModifyLimitQuery()` method\ninstead.\n", - "date": "2011-03-20 00:00:00" - }, - { - "url": "/2008/04/01/doctrine-goes-pecl.html", - "slug": "doctrine-goes-pecl", - "title": "APRIL FOOLS! Doctrine goes PECL", - "authorName": "jwage", - "authorEmail": "", - "contents": "After many long debates and countless hours of development, Doctrine has\nbeen successfully ported to a PECL extension and will be maintained as a\nPECL extension from now on. The extension can be downloaded and\ninstalled via PEAR. As a PECL extension the ORM performs 4 times as fast\nand brings unbelievable results. Enjoy!\n", - "date": "2008-04-01 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine DBAL RC5\nand Doctrine ORM RC2. There have been almost only minor bugfixes in both\npackages that came up in the last week.\n\nThere is one notable change in ORM: If you execute a DQL Query before\nRC2 a flush would be issued on the EntityManager if there were pending\ninsertions. This flush has now been removed. It was never documented to\nbe executed, so we don't think this will cause major pain to anyone.\nJust make sure to call flush explicitly whenever you need it.\n\nSee the changelogs for both projects:\n\n- [DBAL RC5\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10113)\n- [ORM RC2\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10112)\n\nBoth DBAL and ORM are essentially bug-free. All the still open bug\nreports are either:\n\n- Improvement/feature requests (only marked as bug)\n- Minor and will be fixed in 2.1, because they need some refactorings.\n We will make sure that they appear in the Known Issues section\n before the final release.\n- Some trivial bugs in Tools/Console namespace that don't affect the\n core of the ORM. We are waiting for more feedback on those issues.\n\nExpect these Release Candidates to be tagged as final if no critical or\nmajor issues are discovered in the next week.\n\nYou can grab the code from our [downloads\nsection](https://www.doctrine-project.org/projects) or [directly from\nGithub](https://github.com/doctrine/orm/commits/2.0.0RC2).\n\nIn these last days before the final release we will focus on the\ndocumentation. As you might have noticed we already switched the ORM\ndocumentation to be rendered with Sphinx and ReStructured Text. You are\nnow able to search the docs. We will update the layout to be more\nDoctrine friendly and migrate the other packages to Sphinx/ReST in the\nnext days.\n", + "date": "2010-12-12 00:00:00" }, { - "url": "/2011/09/25/doctrine-maintenance-sep2011.html", - "slug": "doctrine-maintenance-sep2011", - "title": "Maintenance 2.1 Releases for Common, DBAL and ORM and DBAL 2.0.9", - "authorName": "beberlei", + "url": "/2013/05/11/doctrine-2-3-4.html", + "slug": "doctrine-2-3-4", + "title": "Doctrine 2.3.4 released", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "We have released the maintenance versions Common 2.1.2, DBAL 2.1.3 and\nORM 2.1.2.\n\n- [Common 2.1.2\n Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10161)\n- [DBAL 2.1.3\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10162)\n- [ORM 2.1.2\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10154)\n\nA total of 20 bugs have been fixed in all 3 components. The DBAL release\ncontains a security fix for the Oracle driver fixing [a possible SQL\ninjection issue](https://github.com/doctrine/dbal/issues/1321).\nIf you are using Oracle please update immediately. This security fix was\nbackported to 2.0 and a new 2.0.9 version was released.\n", - "date": "2011-09-25 00:00:00" + "contents": "**11.05.2013**\n\nWe have released version 2.3.4 of Doctrine ORM and DBAL. We fixed as\nmuch as 18 DBAL tickets and 12 ORM tickets.\n\nSee a Changelog of both components:\n\n- [DBAL](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10421)\n- [ORM](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10420)\n\nYou can install the release with\n[PEAR](http://pear.doctrine-project.org) or with\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.4\",\n \"doctrine/dbal\": \"2.3.4\"\n }\n }\n", + "date": "2013-05-11 00:00:00" }, { - "url": "/2007/11/02/beta-2.html", - "slug": "beta-2", - "title": "Beta 2", + "url": "/2008/06/16/getting-started-with-doctrine-and-symfony-1-1.html", + "slug": "getting-started-with-doctrine-and-symfony-1-1", + "title": "Getting started with Doctrine and symfony 1.1", "authorName": "jwage", "authorEmail": "", - "contents": "The Doctrine team is proud to announce that we have scheduled the\nrelease of the second beta snapshot for November 31st, 2007. This is\nvery exciting news for the Doctrine team and community.\n\nThis means Doctrine is nearing a real release candidate :) As you all\nknow, we had a RC1 that was released a little while back, but it was a\nmistake to call it an RC since we planned on still making many changes\nthat would break BC. We have corrected ourselves and renamed it Beta1.\nWe will continue with beta releases until we are comfortable with\nreleasing a true RC1.\n", - "date": "2007-11-02 00:00:00" + "contents": "Today, over on the symfony-project blog. A short tutorial on how to get\nstarted using Doctrine and symfony 1.1 has been published. As of symfony\n1.1, Doctrine is officially supported by symfony and this is the first\nstep of many to make Doctrine the default ORM in symfony. Over the\ncoming months, much of the symfony + Propel documentation will be ported\nto work with Doctrine. The tutorial can be read here.\n", + "date": "2008-06-16 00:00:00" }, { - "url": "/2013/12/23/our-hhvm-roadmap.html", - "slug": "our-hhvm-roadmap", - "title": "Our HHVM Roadmap", - "authorName": "Benjamin Eberlei", + "url": "/2009/11/16/doctrine-1-2-0-beta3-released.html", + "slug": "doctrine-1-2-0-beta3-released", + "title": "Doctrine 1.2.0 BETA3 Released", + "authorName": "jwage", "authorEmail": "", - "contents": "Facebook has been [pushing HHVM alot\nlately](https://hhvm.com/blog/2813/we-are-the-98-5-and-the-16) ,\nhelping open source projects to get their test-suite running 100%. For\nDoctrine HHVM is particularly interesting, because of the performance\ngains that the complex PHP algorithms inside ORM would probably get.\nFrom my current feeling Doctrine will be the PHP open-source project\ngetting the most gain from running on HHVM. However with the tests not\nyet passing on the ORM, we can only imagine how big that performance\nimprovement will be.\n\nOne roadblock for us to investigate HHVM in more detail was missing CI\nsupport. But then Travis CI [announced support for\nHHVM](https://blog.travis-ci.com/2013-12-16-test-php-code-with-the-hiphop-vm)\nlast week. With automated testing support available we think it is time\nto announce our official HHVM roadmap.\n\nOne of our goals for 2014 is running DBAL and ORM on HHVM with 100% of\nthe testsuites passing. Every Doctrine subproject targeting to support\nHHVM will start running the tests against HHVM with `allow_failure`\nenabled on Travis CI. Whenever a Doctrine subproject passes all its\ntests on HHVM, we will remove the `allow_failure` and the project will\nbe officially supporting HHVM from that version on.\n\nSo far we have been working on the Common projects to run on HHVM for\nseveral months now and Guilherme and Alexander are contributing to HHVM\nitself to get some missing APIs working. We are happy to announce that\nthe following Common projects currently have full HHVM support from us:\n\n- [Collections](https://travis-ci.org/doctrine/collections)\n- [Inflector](https://travis-ci.org/doctrine/inflector)\n- [Lexer](https://travis-ci.org/doctrine/lexer)\n\nGuilherme is working on getting\n[Annotations](https://travis-ci.org/doctrine/annotations) and\n[Cache](https://travis-ci.org/doctrine/cache) working and the\n[Common](https://travis-ci.org/doctrine/common) mainproject will be\nevaluated shortly after all the common projects succeed.\n[DBAL](https://travis-ci.org/doctrine/dbal) and\n[ORM](https://travis-ci.org/doctrine/orm) will be much more work,\nbut we are very confident to achieve this goal.\n\nIf you want to help us with this goal, you can check the current Travis\nfailure reports of the projects and come up with ideas how to fix them\nin the Doctrine code or with bug reports for HHVM. We are glad to\ndiscuss these issues on Freenode IRC in channel \"\\#doctrine-dev\".\n\nWith this announcement we hope that other PHP projects, frameworks and\nlibraries will follow to make HHVM an official build target in the\nfuture.\n", - "date": "2013-12-23 00:00:00" + "contents": "We're getting very close to a stable Doctrine 1.2 with the latest BETA3\nbeing released today. This will most likely be the last beta release\nbefore our first release candidate next week. If everything goes as\nplanned we will have a stable release hopefully a little before the end\nof November.\n\nYou can view the [change\nlog](https://www.doctrine-project.org/change_log/1_2_0_BETA3) or\n[download](https://www.doctrine-project.org/download#1_2) this release\nnow. If you find any issues please open tickets in\n[Jira](https://www.doctrine-project.org/jira).\n", + "date": "2009-11-16 00:00:00" }, { - "url": "/2009/06/15/doctrine-1-0-10-and-1-1-2-released.html", - "slug": "doctrine-1-0-10-and-1-1-2-released", - "title": "Doctrine 1.0.10 and 1.1.2 Released", - "authorName": "jwage", + "url": "/2012/12/28/doctrine-orientdb-odm.html", + "slug": "doctrine-orientdb-odm", + "title": "Doctrine OrientDB Object Document Mapper", + "authorName": "odino", "authorEmail": "", - "contents": "Today I am happy to release two new maintenance releases for Doctrine.\nAs usual we have a new version for the 1.0 branch and a new version for\nthe 1.1 branch. The new versions can be gotten on the\n[Download](https://www.doctrine-project.org/download) page.\n\nYou can review the changelogs for\n[1.0.10](https://www.doctrine-project.org/change_log/1_0_10) and\n[1.1.2](https://www.doctrine-project.org/change_log/1_1_2) to see what\nall issues have been addressed in these releases.\n\nOn a side note, development on the Doctrine 1.2 version will begin very\nsoon so if you have any ideas or features you'd like to see in this\nversion please bring them to our attention and we may be able to address\nthem in this version. We plan for the 1.2 version to concentrate on bug\nfixes, performance fixes and small features to make the use of the 1.x\nversion of Doctrine more enjoyable without any major BC breaks.\n", - "date": "2009-06-15 00:00:00" + "contents": "\"2012 is the year of graph databases\" was the sentence that a lot of\npeople were hearing at the end of 2011, especially after the explosion\nof Big Data associated with social networks.\n\nAt the beginning of this year, a really promising GraphDB,\n[OrientDB](https://orientdb.org) , saw its first stable release (1.0.0)\nwhich finally gave to the world a stable toy pretty different from the\ntraditional RDBMS that we're used to see and from the document-based DBs\nlike MongoDB or CouchDB: OrientDB integrates document capabilities with\na graph layer, thus it sounded very, very interesting.\n\nEven before going stable, there were some companies already using\nOrientDB, thanks to the language-specific drivers created by the\ncommunity surrounding this GraphDB: one of them, for PHP, was\n[Orient](https://github.com/congow/Orient) , a bunch of classes that\nwrapped PHP's native cURL functions to make queries against OrientDB's\nvia the HTTP protocol.\n\nDay after day, the guys behind Orient, this PHP library, decided to add\n- mostly inspired by the doctrine 1 query builder and the Doctrine2 ODMs\n- abstraction and layers over that bunch of classes, finally having 3\ndifferent pieces of software to interact with OrientDB from PHP: the\nHTTP binding, which does HTTP calls to the OrientDB server, the Query\nBuilder, which provides an object-oriented synthax to write SQL+\n(OrientDB's SQL) queries and the Data Mapper, which is still unfinished.\n\nTrying to adhere to the Doctrine2 ODMs standards, the code looks pretty\nsimilar:\n\n~~~~ {.sourceCode .php}\ngetRepository('My\\Entity');\n\n// creating SQL+ queries\n$query = new Query();\n$query->from(array('users'))->where('username = ?', \"admin\");\n\n// mapping POPOs\nnamespace Domain;\n\nuse Doctrine\\ODM\\OrientDB\\Mapper\\Annotations as ODM;\n\n/**\n* @ODM\\Document(class=\"Address\")\n*/\nclass Address\n{\n /**\n * @ODM\\Property(type=\"string\")\n */\n public $street;\n}\n\n// finding a record\n$record = $manager->find($id);\n~~~~\n\nThe work done so far was interesting enough to think about an OrientDB\nODM inside the Doctrine organization, thing that eventually happened\ntoday when the old repository has been moved to the [doctrine\norganization](https://github.com/doctrine/orientdb-odm) on Github.\n\nMore news are going to come in the next weeks, as the target is to\nrelease a stable version of the OrientDB ODM this year: you can already\n[use it](https://packagist.org/packages/doctrine/orientdb-odm) or even\n[fork it](https://github.com/doctrine/orientdb-odm) if you want to\ncontribute or propose a patch.\n\nFor further informations you can subscribe to the doctrine-dev google\ngroup or join the IRC channel \\#doctrine-dev on Freenode.\n", + "date": "2012-12-28 00:00:00" }, { - "url": "/2009/08/15/doctrine2-native-queries.html", - "slug": "doctrine2-native-queries", - "title": "Doctrine 2 Native Queries", - "authorName": "romanb", - "authorEmail": "", - "contents": "If you are familar with Doctrine\\_RawSql from Doctrine 1.x you probably\nknow that it is somewhat broken by design since it requires a special\nsyntax in the select clause that makes a lot of SQL constructs in the\nselect clause impossible.\n\nDoctrine 2 introduces a facility called \"native queries\", represented by\nthe `Doctrine\\ORM\\NativeQuery` class that replaces Doctrine\\_RawSql. The\nclue about NativeQuery is that it allows the usage of real native SQL\nyet the result can be transformed into all the different formats that\nare supported by DQL.\n\nThis is achieved through having a generic description of how an SQL\nresult maps to a Doctrine result in form of a\n`Doctrine\\ORM\\Query\\ResultSetMapping`.\n\nEnough of the introductory talk, lets look at a (primitive) example from\nour test suite:\n\n~~~~ {.sourceCode .php}\naddEntityResult('Doctrine\\Tests\\Models\\CMS\\CmsUser', 'u');\n$rsm->addFieldResult('u', 'id', 'id'); // ($alias, $columnName, $fieldName)\n$rsm->addFieldResult('u', 'name', 'name'); // // ($alias, $columnName, $fieldName)\n\n$query = $this->_em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm);\n$query->setParameter(1, 'romanb');\n\n$users = $query->getResult();\n\n$this->assertEquals(1, count($users));\n$this->assertTrue($users[0] instanceof CmsUser);\n$this->assertEquals('Roman', $users[0]->getName());\n~~~~\n\nThe SQL that is passed to createNativeQuery is not touched by Doctrine\nin any way. The NativeQuery and ResultSetMapping combination are\nextremely powerful. It might not surprise you that Doctrine 2 creates a\nResultSetMapping internally when it transforms DQL to SQL.\n\nGranted, this was a very trivial example that can easily be expressed in\na short DQL 1-liner but it was just for demonstration purposes (and I am\nbad at making up complex ad-hoc SQL examples that make sense).\n\nSo when is this useful? While DQL has been heavily improved in Doctrine\n2 and has many new powerful features which we will cover in future blog\nposts, it is sometimes necessary to use native SQL. NativeQuery gives\nyou the ability to do that while still retrieving the results in the\nconvenient Doctrine formats you are familar with. NativeQuery is also an\nobvious choice when starting to migrate a pure SQL project to Doctrine\nwithout going into all the DQL details from the start.\n\nMore on NativeQuery and ResultSetMapping can be found in the new\ndocumentation under:\n\n[Documentation - Native\nSql](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/native-sql.html#native-sql)\n", - "date": "2009-08-15 00:00:00" + "url": "/2015/12/02/doctrine-module-0-10-0.html", + "slug": "doctrine-module-0-10-0", + "title": "DoctrineModule 0.10.0 Release", + "authorName": "Gianluca Arbezzano", + "authorEmail": "gianarb92@gmail.com", + "contents": "We are happy to announce DoctrineModule `0.10.0`.\n\nInstallation\n============\n\nYou can install this version of the DoctrineModule by using Composer and\nthe:\n\n```json\n{\n \"require\": {\n \"doctrine/doctrine-module\": \"~0.10.0\"\n }\n}\n```\n\nChanges since 0.9.0\n===================\n\nThis is a list of issues resolved in `2.5.2` since `2.4.1`:\n\n- [[\\#521]](https://github.com/doctrine/DoctrineModule/pull/521):\n Fixed php\\_codesniffer dependency\n- [[\\#534]](https://github.com/doctrine/DoctrineModule/pull/534):\n Fixed wrong Predis Mock\n- [[\\#537]](https://github.com/doctrine/DoctrineModule/pull/537):\n Update hydrator.md\n- [[\\#520]](https://github.com/doctrine/DoctrineModule/pull/520): Fix\n for issue \\#230 and fixes for \\#234\n- [[\\#539]](https://github.com/doctrine/DoctrineModule/pull/539):\n Better support for snake\\_case field names\n- [[\\#535]](https://github.com/doctrine/DoctrineModule/pull/535): Adds\n additional processing for DoctrineObject::toMany\n\nPlease report any issues you may have with the update on the mailing\nlist or on\n[GitHub](https://github.com/doctrine/DoctrineModule/issues).\n", + "date": "2015-12-02 00:00:00" }, { "url": "/2014/09/15/dbal-235.html", @@ -819,58 +639,49 @@ "date": "2014-09-15 00:00:00" }, { - "url": "/2008/06/13/php-net-style-api-documentation-lookups.html", - "slug": "php-net-style-api-documentation-lookups", - "title": "Php.net style API documentation lookups", - "authorName": "jwage", - "authorEmail": "", - "contents": "\n\nI have been using php.net style API lookups ever since I can remember.\nIt is very nice being able to simply go to https://secure.php.net/array\\_walk\nand have it pull up that function in the PHP API Documentation. So,\ntonight i have implemented this functionality in to the Doctrine\nwebsite. Below are some examples of how you can quickly access the API\ndocs for a specific function or class.\n\n
\n\nHi, my name is Bulat S. (my last name won't make it any easier, but in\ncase you were wondering it's Shakirzyanov), I joined OpenSky in August\n2009 (It's been almost a year since then, but it feels like ages). My\nofficial title in the company is Hacker, which also says a lot about me\n(that I don't like corporate titles for one).\n\n
\n\n\nThe last 6 weeks were truly amazing for me. Not only was I able to learn\na new technology, I also managed to contribute back to the community.\nBut let's go over everything step by step.\n\n
\n\n\nToday I am happy to introduce the first training course offered on\nDoctrine 1.0. These courses are brought to you by SensioLabs, the\ncreators of the symfony MVC Framework. In addition to the Doctrine\ncourses they offer ones on symfony and PHP. Below is a list of some of\nthe upcoming events that you can register for today!\n\n
\n\nThe workshops are a three day event and include lunch everyday,\nmid-morning and mid-afternoon snacks, a copy of all the presented\nmaterial on a stick and example code. The workshop runs from 9am -5pm on\nthe first 2 days and from 9am - 4:30pm on the last day. You can learn\nmore about the available training sessions here.\n\n
\n\n\n", - "date": "2008-09-30 00:00:00" + "contents": "We've been really busy around here as you may have noticed. Doctrine 1.1\nis about to be released, we just got some much needed new documentation,\nwe're going to be offering a printed version of the documentation soon!\nSomething we haven't talked to much about is Doctrine 2.0! Roman has\nbeen quietly working on the next major major version of Doctrine, 2.0.\nThis version will be taking a big leap by requiring PHP 5.3! The\nprogress this new version of PHP is so great and it lends itself very\nwell to the world of Object Relational Mappers.\n\nDoctrine 2.0 Teaser\n===================\n\nHere is an early teaser of what one of the class meta data drivers looks\nlike:\n\n~~~~ {.sourceCode .php}\n \\# | Seconds | Memory --- | --------- | ----------------- 1 | 24 |\n> 129170.648438 KB 2 | 23 | 129164.078125 KB 3 | 23 | 129176.851562 KB\n\nPHP 5.3.0alpha4-dev\n-------------------\n\n> \\# | Seconds | Memory --- | --------- | ----------------- 1 | 21 |\n> 89858.7421875 KB 2 | 20 | 89864.59765625 KB 3 | 21 | 89867.89453125 KB\n\nThe Doctrine test suite uses **31%** less memory and is **17%** faster\nwhen running under PHP 5.3!\n", + "date": "2009-01-26 00:00:00" }, { - "url": "/2012/12/28/doctrine-orientdb-odm.html", - "slug": "doctrine-orientdb-odm", - "title": "Doctrine OrientDB Object Document Mapper", - "authorName": "odino", + "url": "/2010/11/18/common-rc2-dbal-rc2-release.html", + "slug": "common-rc2-dbal-rc2-release", + "title": "Common RC2 and DBAL RC3 released", + "authorName": "beberlei", "authorEmail": "", - "contents": "\"2012 is the year of graph databases\" was the sentence that a lot of\npeople were hearing at the end of 2011, especially after the explosion\nof Big Data associated with social networks.\n\nAt the beginning of this year, a really promising GraphDB,\n[OrientDB](https://orientdb.org) , saw its first stable release (1.0.0)\nwhich finally gave to the world a stable toy pretty different from the\ntraditional RDBMS that we're used to see and from the document-based DBs\nlike MongoDB or CouchDB: OrientDB integrates document capabilities with\na graph layer, thus it sounded very, very interesting.\n\nEven before going stable, there were some companies already using\nOrientDB, thanks to the language-specific drivers created by the\ncommunity surrounding this GraphDB: one of them, for PHP, was\n[Orient](https://github.com/congow/Orient) , a bunch of classes that\nwrapped PHP's native cURL functions to make queries against OrientDB's\nvia the HTTP protocol.\n\nDay after day, the guys behind Orient, this PHP library, decided to add\n- mostly inspired by the doctrine 1 query builder and the Doctrine2 ODMs\n- abstraction and layers over that bunch of classes, finally having 3\ndifferent pieces of software to interact with OrientDB from PHP: the\nHTTP binding, which does HTTP calls to the OrientDB server, the Query\nBuilder, which provides an object-oriented synthax to write SQL+\n(OrientDB's SQL) queries and the Data Mapper, which is still unfinished.\n\nTrying to adhere to the Doctrine2 ODMs standards, the code looks pretty\nsimilar:\n\n~~~~ {.sourceCode .php}\ngetRepository('My\\Entity');\n\n// creating SQL+ queries\n$query = new Query();\n$query->from(array('users'))->where('username = ?', \"admin\");\n\n// mapping POPOs\nnamespace Domain;\n\nuse Doctrine\\ODM\\OrientDB\\Mapper\\Annotations as ODM;\n\n/**\n* @ODM\\Document(class=\"Address\")\n*/\nclass Address\n{\n /**\n * @ODM\\Property(type=\"string\")\n */\n public $street;\n}\n\n// finding a record\n$record = $manager->find($id);\n~~~~\n\nThe work done so far was interesting enough to think about an OrientDB\nODM inside the Doctrine organization, thing that eventually happened\ntoday when the old repository has been moved to the [doctrine\norganization](https://github.com/doctrine/orientdb-odm) on Github.\n\nMore news are going to come in the next weeks, as the target is to\nrelease a stable version of the OrientDB ODM this year: you can already\n[use it](https://packagist.org/packages/doctrine/orientdb-odm) or even\n[fork it](https://github.com/doctrine/orientdb-odm) if you want to\ncontribute or propose a patch.\n\nFor further informations you can subscribe to the doctrine-dev google\ngroup or join the IRC channel \\#doctrine-dev on Freenode.\n", - "date": "2012-12-28 00:00:00" + "contents": "Today we are happy to announce the second release candidate of Doctrine\nCommon and the first, second and third release candidate (yes, all in\none!) of DBAL.\n\nIn the Common package 3 bugs have been fixed, in the DBAL package 9 bugs\nhave been fixed. See the changelogs for details:\n\n- [Common RC1\n Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10093)\n- [DBAL RC3\n Changelogt](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10094)\n\nWe are especially thankful for the support Microsoft has been giving us\nto integrate PDO Sqlsrv. Juozas was invited to [Jumpin\nCamp](http://www.jumpincamp.com) and had time to finish full support for\nthe SQL Server.\n\nThe release of the first release candidate of the ORM package is not far\naway. We will be waiting some days to get some early feedback on the\nlatest updates (updated Common and DBAL dependencies). Expect the first\nrelease candidate for someday next week.\n", + "date": "2010-11-18 00:00:00" }, { - "url": "/2008/06/23/introducing-the-doctrine-cookbook.html", - "slug": "introducing-the-doctrine-cookbook", - "title": "Introducing the Doctrine Cookbook", - "authorName": "jwage", + "url": "/2010/08/06/doctrine2-orm-beta3.html", + "slug": "doctrine2-orm-beta3", + "title": "Doctrine ORM Beta 3 released", + "authorName": "romanb", "authorEmail": "", - "contents": "\n\nToday I would like to introduce something new to the Doctrine\ndocumentation, the Cookbook. This differs from the manual in that it\nwill contain real world examples and tutorials of how you can use\nDoctrine on a daily basis whereas the manual is more of a technical\nbreakdown of the features in Doctrine. We will be publishing many\nadditions to the cookbook in the coming weeks. To start off we have\npublished the following tutorials:\n\n
\n\nIf you are interested in contributing to the Doctrine documentation by\nadding new things or translations please contact me at\n[jonwage@gmail.com](mailto:jonwage@gmail.com).\n\n
\n\n\n", - "date": "2008-06-23 00:00:00" + "contents": "We would like to announce the immediate release of Doctrine ORM BETA 3:\n\n- [Installation](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA3)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10060)\n\nWe fixed 45 issues, most of them bugs reported by our users. The ORM\npackage is now in a state where no new features will be added and we\nwill fully concentrate the efforts on fixing bugs and bringing the\nrelease to a stable state.\n\nNotable changes include:\n\n- `EntityManager#merge()` has been improved considerably and now also\n accepts new entities.\n- Uninitialized Proxies can now be serialized and only throw an\n exception when they are unserialized and accessed without being\n merged into the EntityManager.\n- New method `EntityManager#getPartialReference()` that returns a\n partial entity that only contains the entities primary key and won't\n lazy-load (hence \"partial\").\n\nThis release contains three backwards incompatible changes you should\nknow about when upgrading:\n\nChanged SQL implementation of Postgres and Oracle DateTime types\n================================================================\n\nThe DBAL Type \"datetime\" included the Timezone Offset in both Postgres\nand Oracle. As of this version they are now generated without Timezone\n(TIMESTAMP WITHOUT TIME ZONE instead of TIMESTAMP WITH TIME ZONE). See\n[this comment to Ticket\nDBAL-22](https://www.doctrine-project.org/jira/browse/DBAL-22?focusedCommentId=13396&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_13396)\nfor more details as well as migration issues for PostgreSQL and Oracle.\n\nBoth Postgres and Oracle will throw Exceptions during hydration of\nObjects with \"DateTime\" fields unless migration steps are taken!\n\nRemoved multi-dot/deep-path expressions in DQL\n==============================================\n\nThe support for implicit joins in DQL through the multi-dot/Deep Path\nExpressions was dropped. For example:\n\n SELECT u FROM User u WHERE u.group.name = ?1\n\n\"u.group.name\" is a nested path expression that is an implicit join.\nInternally the DQL parser would rewrite these queries to:\n\n SELECT u FROM User u JOIN u.group g WHERE g.name = ?1\n\nThis explicit notation will be the only supported notation as of now.\nThe internal handling of nested path expressions for implicit joins in\nthe DQL Parser was too complex and error prone in edge cases and\nrequired special treatment for several features we added. Note that this\ndoes not remove any existing functionality, only a convenience notation\nthat can be expressed otherwise. Hence the generated SQL of both\nnotations is exactly the same.\n\nDefault Allocation Size for Sequences\n=====================================\n\nThe default allocation size for sequences has been changed from 10 to 1.\nThis step was made to not cause confusion with users and also because it\nis partly some kind of premature optimization.\n\nWhat next\n=========\n\nIt seems likely that we will not be able to hold the anticipated release\ndate of September 1st for the final release. Instead September 1st will\nlikely see the last beta release, BETA 4, after which we hope to enter\nthe release candiates soon, followed by the stable release.\n", + "date": "2010-08-06 00:00:00" }, { - "url": "/2016/01/05/dbal-2-5-4-and-2-4-5.html", - "slug": "dbal-2-5-4-and-2-4-5", - "title": "Doctrine DBAL 2.5.4 and 2.4.5 Released", + "url": "/2015/04/14/annotations-1-2-4.html", + "slug": "annotations-1-2-4", + "title": "Doctrine Annotations 1.2.4 Release", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n[2.5.4](https://github.com/doctrine/dbal/releases/tag/v2.5.4) and\n[2.4.5](https://github.com/doctrine/dbal/releases/tag/v2.4.5).\n\nDBAL 2.5.4\n==========\n\nSQLite types weren't correctly identified when whitespace was present in\nthe table definitions: the DBAL now correctly recognizes that, and\nignores the whitespace.\n[\\#2272](https://github.com/doctrine/dbal/issues/2272)\n\nconstant `PDO::PGSQL_ATTR_DISABLE_PREPARES` is only defined when PGSQL\nsupport for PHP is enabled with PDO. The DBAL now checks whether the\nconstant is available before relying on it.\n[\\#2249](https://github.com/doctrine/dbal/issues/2249)\n\nDBAL 2.4.5\n==========\n\nThis release backports a number of fixes that were already present in\nDBAL 2.5.3.\n\nSpecifically, following issues were solved:\n\n- SQLite offset with no limit support\n [\\#1069](https://github.com/doctrine/dbal/issues/1069)\n- Fix removing autoincrement column from a primary key\n [\\#1074](https://github.com/doctrine/dbal/issues/1074)\n- Infinite recursion on non-unique table/join alias in QueryBuilder\n [\\#1079](https://github.com/doctrine/dbal/issues/1079)\n- Fix for bad profiling data, showing an indefinitely long query\n [\\#1124](https://github.com/doctrine/dbal/issues/1124)\n- Fix incorrect ordering of columns in clustered indexes on sql server\n [\\#1129](https://github.com/doctrine/dbal/issues/1129)\n- Avoid fatal error in `array_merge` while generating the table\n creation SQL [\\#1141](https://github.com/doctrine/dbal/issues/1141)\n- `template1` as default database for PostgreSQL\n [\\#1162](https://github.com/doctrine/dbal/issues/1162)\n\nPlease be advised that this is the last 2.4.x release, and except for\nsecurity releases, no further patches will be provided for DBAL 2.4:\nplease upgrade to 2.5 as soon as possible.\n\nInstallation\n============\n\nYou can install the DBAL component using Composer:\n\n```bash\ncomposer require doctrine/dbal:~2.5.4\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/dbal/issues).\n", - "date": "2016-01-05 00:00:00" - }, - { - "url": "/2013/03/24/doctrine-2-3-3.html", - "slug": "doctrine-2-3-3", - "title": "Doctrine 2.3.3 released", - "authorName": "Benjamin Eberlei", - "authorEmail": "", - "contents": "**24.03.2013**\n\nWe have released a mini version 2.3.3 of ORM and DBAL. See the list of\n[18\ntickets](https://www.doctrine-project.org/jira/issues/?jql=project%20in%20(DDC%2C%20DBAL%2C%20DCOM)%20AND%20fixVersion%20%3D%20%222.3.3%22%20AND%20status%20%3D%20Resolved%20ORDER%20BY%20priority%20DESC)\nwe fixed.\n\nYou can install the release with [Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.3\",\n \"doctrine/dbal\": \"2.3.3\"\n }\n }\n", - "date": "2013-03-24 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine\nCollections `1.2.4`.\n\nThis release fixes a minor issue\n([\\#51](https://github.com/doctrine/annotations/pull/51)) with highly\nconcurrent I/O and the `FileCacheReader#saveCacheFile()` method.\n\nInstallation\n============\n\nYou can install this version of Doctrine Annotations by using Composer\nand the following `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/annotations\": \"1.2.4\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DCOM).\n", + "date": "2015-04-14 00:00:00" }, { - "url": "/2008/07/26/doctrine-growth.html", - "slug": "doctrine-growth", - "title": "Doctrine growth", + "url": "/2008/08/05/doctrine-1-0-beta1-released.html", + "slug": "doctrine-1-0-beta1-released", + "title": "Doctrine 1.0 BETA1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "\n\nLast October 2007 we implemented some google analytics to our website to\nmonitor the growth of the community. Today the traffic has about doubled\nsince then. We average around 1000 unique visitors per day up from\naround 300 roughly 1 year ago. We expect the growth to continue and we\nlook forward what milestones we can reach together in the future. Check\nout the graph of absolute unique visitors from google analytics below.\n\n
\n\n
\n\n\n", - "date": "2008-07-26 00:00:00" + "contents": "\n\nToday I am happy to announce the release of Doctrine 1.0-BETA1. This\nmarks the true start for the 1st generation Doctrine stable lifecycle.\nAs you may already know, Doctrine 1.0 has been slated to be released on\nSeptember 1st 2008 for quite some time now. We still have a few more\npre-1.0 releases to go until 1.0. The roadmap for now is BETA1, RC1, RC2\nand then 1.0 STABLE. You can see the roadmap in trac if you're\ninterested in keeping up with the Doctrine schedule. More information on\n1.0 and what other things to expect on September 1st will be given soon.\nMake some noise!\n\n
\n\n\n", + "date": "2008-08-05 00:00:00" }, { - "url": "/2011/07/02/doctrine-2-1-rc3.html", - "slug": "doctrine-2-1-rc3", - "title": "Doctrine 2.1 Release Candidate 3", - "authorName": "beberlei", + "url": "/2009/09/01/doctrine2-preview-release.html", + "slug": "doctrine2-preview-release", + "title": "Doctrine 2 Preview Release", + "authorName": "romanb", "authorEmail": "", - "contents": "We released Doctrine 2.1 Release Candidate 3 after some important\nchanges to the new annotation reader. That is also why we didnt manage\nto keep our release date of June 30th. The new date is Monday.\n\nAbout the Annotations: We constantly had problems with the autoloading\nof annotations through PHP autoloaders, increasing with Symfony2\nstarting to use the reader with enabled autoloading. The problem with\nreusing the PHP autoloader can be explained easily: Not every Docblock\nAnnotation has a corresponding PHP class that can be instantiated by\nDoctrines AnnotationReader. The question is how we detect the\nannotations from the documentation related comments only. The solution\nrequired a silent autoloader, meaning no failure should occur if an\nautoload is triggered for a non-existant class. Implementing such an\nautoloader has performance drawbacks though, which is why the Doctrine\ndoes not fail silently. Autoloading annotations was not compatible with\nDoctrines own class loader.\n\nThat problem is why we removed PHP autoloading completely and\nreimplemented our own autoloading mechanism inside Doctrine Annotations.\nNow we have much more control about when errors occur and if we skip\nthem or throw an exception.\n\nSee [this following Gist](https://gist.github.com/1059486) on how\nautoloading annotations works. This is not relevant if you use\n\\$config-\\>newDefaultAnnotationDriver() with the ORM though, which will\nhandle all the necessary bootstrapping for you.\n\nAdditionally we have changed the annotation reader in other aspects. To\nbe a valid annotation your class have to extend (backwards compatible\nway, will be removed in 3.0.x) or contain @Annotation inside the class\nlevel docblock.\n\nWe will update the documentation for Doctrine Common accordingly in the\nnext hours to allow you to understand all the changes made between 2.0\nand 2.1.\n\nIf you are using Annotations either in Doctrine 2 or within your own\ncode please update and check the changes.\n", - "date": "2011-07-02 00:00:00" + "contents": "Exactly one year ago today we released Doctrine 1.0 stable, which was on\nthe birthday of Jon. Again, today we have chosen the birthday of Jon to\nrelease the first preview of Doctrine 2. This is an alpha release that\nis not intended for production use.\n\nDoctrine 2 marks the beginning of a new approach to ORM with Doctrine.\nIt represents a rewrite of more than 90% of the existing codebase. The\nnew key concepts behind Doctrine 2 are to put your domain model more\ninto focus and to provide transparent persistence where the persistence\nis a service and not an inherent property of domain classes. This has a\nlot of advantages like decoupling your valuable business logic from the\npersistence layer and easy testability of your domain model.\n\nPackages\n========\n\nDoctrine 2 is reorganized into reusable layers that are available as\nseparate packages. The Doctrine 2 Core consists of the following\npackages:\n\n- Doctrine Common (Generic components, high re usability)\n- Doctrine DBAL (The database abstraction layer, includes: Common)\n- Doctrine ORM (The ORM tools, includes: Common + DBAL)\n\nAll of these packages are currently distributed and maintained\nsynchronously which means they are released together and share the same\nversion numbers. This may change in the future. These three packages are\navailable as separate downloads even though you will most likely want to\ndownload the ORM package which already contains the Common and DBAL\npackages.\n\nFeatures\n========\n\nThis Preview Release is mainly about the core ORM functionality and\nfeatures of Doctrine 2, like mapping drivers, DQL, association mapping,\ninheritance mapping, change tracking, etc. Most of the supporting tools\nthat you are used to for rapid development like the CLI, migrations,\nbehaviors and validation have not yet been ported to Doctrine 2 and are\nstill under heavy development, most of them will end up as loosely\ncoupled extensions.\n\nMapping drivers\n===============\n\nA mapping driver is a particular strategy for providing ORM metadata to\nDoctrine 2. This Preview Release contains mapping drivers for docblock\nannotations, XML and YAML. The XML and YAML drivers are still in an\nexperimental stage and while we encourage you to use them, you may\nencounter more issues than with the docblock annotation driver as it is\nthe primary driver used in our development.\n\nDocumentation\n=============\n\nThe documentation for Doctrine 2 can be found\n[here](https://www.doctrine-project.org/projects/doctrine-orm/en/current/). Please be\naware that the documentation is still a work in progress and not all\nareas have been completed.\n\nSandbox\n=======\n\nTo get started quickly, please check out our [sandbox quickstart\ntutorial](https://www.doctrine-project.org/projects/doctrine-orm/en/current/tutorials/getting-started.html).\nYou can also obtain Doctrine 2.0.0 ALPHA1 via a PEAR package like normal\nwhich can be found on the\n[download](https://www.doctrine-project.org/download)\n\nWe want to encourage everyone to start experimenting with the new\ngeneration of Doctrine in order to get familiar with it and to help find\nany outstanding issues.\n\nAs always, please report any issues and feature requests through\n[trac](http://trac.doctrine-project.org).\n\nThank you for using Doctrine.\n", + "date": "2009-09-01 00:00:00" }, { - "url": "/2008/12/03/first-1-1-alpha-version-released.html", - "slug": "first-1-1-alpha-version-released", - "title": "First 1.1 Alpha Version Released", + "url": "/2008/04/30/wow-1000-tickets.html", + "slug": "wow-1000-tickets", + "title": "Wow! 1000 tickets", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am very happy to introduce the first alpha version of the 1.1\nbranch of Doctrine. This means we have just about finalized the scope of\nfeatures and are preparing to enter the beta and release candidate\ncycles before releasing the stable version.\n\nThis new version is sporting dozens of enhancements and even more bug\nfixes. Primarily the [new scalar hydration\ntype](https://www.doctrine-project.org/2008/10/12/new-hydration-modes-for-doctrine-1-1.html)\n, [the migration diff\ntool](https://www.doctrine-project.org/2008/10/18/new-to-migrations-in-1-1.html) ,\nand other [miscellaneous new\nfeatures](https://www.doctrine-project.org/2008/10/02/doctrine-1-1-development-begins.html).\n\nYou can download the package\n[here](https://www.doctrine-project.org/download) and read some\ndocumentation on the changes and new features\n[here](http://trac.doctrine-project.org/browser/branches/1.1/UPGRADE_TO_1_1).\n", - "date": "2008-12-03 00:00:00" + "contents": "Last night the 1000th ticket came rolling in. This is just a reminder to\nthe fact that Doctrine while still young, has had a very long and\nevolutionary life so far. The growth this first quarter in the community\nand contributions from all over the world really shows that Doctrine has\na bright future in PHP and I look forward to seeing all the doors that\nDoctrine will open. Thanks everyone!\n", + "date": "2008-04-30 00:00:00" }, { - "url": "/2011/08/29/dbal-security-2011-1.html", - "slug": "dbal-security-2011-1", - "title": "Security releases 2.0.8 and 2.1.2", - "authorName": "beberlei", - "authorEmail": "", - "contents": "It was brought to our attention that identifier quoting in Doctrine DBAL\nhas a potential security problem when user-input is passed into this\nfunction, making the security aspect of this functionality obsolete. We\nfixed as soon as we realized it and apologize for to our users for this\nerror.\n\nWe released versions 2.1.2 and 2.0.8 of DBAL that both contain a fix for\nthe problem. You can grab the code from\n[PEAR](http://pear.doctrine-project.org) ,\n[Github](https://github.com/doctrine/dbal) or the [Downloads\nsection](https://www.doctrine-project.org/projects/dbal/download).\n\nIf you make use of AbstractPlatform::quoteIdentifier() or\nDoctrine::quoteIdentifier() please upgrade immediately. The ORM itself\ndoes not use identifier quoting in combination with user-input, however\nwe still urge everyone to update to the latest version of DBAL.\n", - "date": "2011-08-29 00:00:00" + "url": "/2016/10/07/doctrine-mongodb-odm-release-1.1.2-and-1.0.8.html", + "slug": "doctrine-mongodb-odm-release-1.1.2-and-1.0.8", + "title": "Doctrine MongoDB ODM 1.1.2 and 1.0.8 released", + "authorName": "Andreas Braun", + "authorEmail": "alcaeus@alcaeus.org", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.1.2](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.2)\nand\n[1.0.8](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.8).\n\nMongoDB ODM 1.0.8\n=================\n\n- calling `dropCollections()` in the SchemaManager did not drop GridFS\ncollections. [\\#1468](https://github.com/doctrine/mongodb-odm/pull/1468)\n- calling `clear()` on an uninitialized collection with `orphanRemoval`\nenabled failed to remove orphaned documents.\n[\\#1500](https://github.com/doctrine/mongodb-odm/pull/1500) - Documents\nwith identifiers evaluating to `false` (e.g. empty string or 0) could\nnot be reference using `createDBRef()` in DocumentManager.\n[\\#1503](https://github.com/doctrine/mongodb-odm/pull/1503)\n\nMongoDB ODM 1.1.2\n=================\n\n- This release contains the bugfixes outlined for ODM 1.0.8 above\n\n- Querying for referenced objects in `findBy()` or `findOneBy()` did not\nwork properly due to incorrect preparation of the DBRef objects.\n[\\#1481](https://github.com/doctrine/mongodb-odm/pull/1481)\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.1.2\"\n }\n}\n```\n\nSupport for Doctrine ODM 1.0.x\n==============================\n\nAs outlined previously, support for MongoDB ODM 1.0.x will end on\nDecember 9th, 2016. If you have not upgraded to version 1.1 yet, please\ndo so to receive future bug fixes.\n", + "date": "2016-10-07 00:00:00" }, { - "url": "/2007/12/04/url_changes.html", - "slug": "url_changes", - "title": "URL Changes", + "url": "/2009/12/07/doctrine-1-2-1-released.html", + "slug": "doctrine-1-2-1-released", + "title": "Doctrine 1.2.1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Recently we have done some work to sort out our domain names and the\npermanent URL structure we will use from now on. We have put rules in\nplace to maintain all existing URLs so they redirect to\nwww.phpdoctrine.org, trac.phpdoctrine.org and svn.phpdoctrine.org. You\nwill need to update your svn externals to point to svn.phpdoctrine.org.\n", - "date": "2007-12-04 00:00:00" + "contents": "Today we are happy to bring you the first maintenance release for the\nDoctrine 1.2 version. We will continue to have regular maintenance\nreleases for the 1.2 branch for the next 18 months. On average we will\nhave one release per month containing bug fixes only. These releases are\nmeant to be fully backwards compatible so it is recommended that you\nupgrade right away!\n\nBelow are some of the changes made in this release:\n\n\n\nHi, my name is Bulat S. (my last name won't make it any easier, but in\ncase you were wondering it's Shakirzyanov), I joined OpenSky in August\n2009 (It's been almost a year since then, but it feels like ages). My\nofficial title in the company is Hacker, which also says a lot about me\n(that I don't like corporate titles for one).\n\n
\n\n\nThe last 6 weeks were truly amazing for me. Not only was I able to learn\na new technology, I also managed to contribute back to the community.\nBut let's go over everything step by step.\n\n
\n\n\nAnother item worth mentioning about the 0.11 release is that the\nintegration between Doctrine and symfony has evolved quite well over the\nfirst quarter of 2008 as symfony 1.1 is coming out and 0.11 is released.\nThe integration between symfony 1.1 and Doctrine with sfDoctrinePlugin\nis now officially supported by the symfony core team and we will slowly\nbe introducing more documentation over the coming months.\n\n
\n\n\n", + "date": "2008-06-24 00:00:00" }, { - "url": "/2008/08/25/pre-1-0-updates-and-1-0-0-rc1-released.html", - "slug": "pre-1-0-updates-and-1-0-0-rc1-released", - "title": "Pre 1.0 Updates and 1.0.0-RC1 Released", - "authorName": "jwage", + "url": "/2011/05/14/doctrine-maintenance-may11.html", + "slug": "doctrine-maintenance-may11", + "title": "Maintenance Releases 2.0.5 for DBAL and ORM", + "authorName": "beberlei", "authorEmail": "", - "contents": "\n\nToday we have a few updates for the project to announce. You can read\nabout whats new below.\n\n
\n\nDoctrine Release Candidate 1 Released\n\n
\n\nThe first release candidate of Doctrine 1.0 has been made available.\nDoctrine 1.0 is still scheduled to be released on September 1st 2008.\nYou can download Doctrine here.\n\n
\n\nNew Domain! www.doctrine-project.org\n\n
\n\nWe have decided to ditch the old phpdoctrine.org domain in favor of\ndoctrine-project.org. The main reason is due to licensing complications\nand us not being technically allowed to have the name PHP in our project\nname.\n\n
\n\nMinor Website Ideas\n\n
\n\nWe have updated the website with some minor asthetic changes, primarily\nto the homepage.\n\n
\n\n\n", - "date": "2008-08-25 00:00:00" + "contents": "Slightly behind schedule we released the next round of maintenance\nversions of Doctrine DBAL (2.0.5) and ORM (2.0.5) today. It also\nincludes a Security fix for DBAL in combination with PDO MySQL and\ncharsets that was closed in PHP 5.3.6. If you are using 5.3.6, you\nshould now use the \"charset\" option in DriverManager::getConnection()\ninstead of the MysqlSessionInit listener.\n\n- [DBAL Changelog (4 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10132)\n- [ORM Changelog (15 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10133)\n\nYou can grab the packages from the download page or our [Github\nrepository](https://github.com/doctrine).\n\nPlease report any problems to the Jira Bugtracker.\n", + "date": "2011-05-14 00:00:00" }, { - "url": "/2013/09/25/phpcr-odm-qbv2.html", - "slug": "phpcr-odm-qbv2", - "title": "PHPCR ODM QueryBuilder v2", - "authorName": "dantleech", + "url": "/2007/12/04/url_changes.html", + "slug": "url_changes", + "title": "URL Changes", + "authorName": "jwage", "authorEmail": "", - "contents": "managed to merge the new query builder.\n\nI developed the original query builder about 9 months ago - it was one\nof my first contributions to the PHPCR-ODM doctrine project. It was\nheavily based on the ORM query builder and the consensus being that we\nshould make the ODM as intuitive as possible for existing ORM users.\n\nAbstracting PHPCR to fit the existing interface worked up until a point,\nwe could implement the *basic* functionality of the ORM Query Builder\nexactly, things started to come undone when we looked at implementing\njoins.\n\nI had added the joins in the API but didn't get around to implementing\nthem, the methods just threw \"not implemented\" exceptions. Later, when\nwe wanted to implement them, it wasn't so simple. Infact, upon closer\ninspection, many of the things available in the PHPCR API's Query Object\nModel interface were not covered by the model of the query builder we\nhad chosen, in short, it was not fit for purpose. I expounded this on\nthe following wiki page:\n\n- [https://github.com/symfony-cmf/symfony-cmf/wiki/Query-Builder-v2](https://github.com/symfony-cmf/symfony-cmf/wiki/Query-Builder-v2)\n\nAs detailed in the above linked page, it seemed to me that either we\nimplemented a 2 part factory heavy query builder or a fluent node based\nquery builder. The node based design won. However, at the time I never\nimagined it would take so long to write! So nearly 2 months later here\nwe are.\n\nSome features of the new query builder\n\n- Can fully express the PHPCR QOM (Query Object Model).\n- Features a fluent interface.\n- Strict validation and helpful exception messages.\n- Less verbose than the PHPCR QOM model.\n\nLets compare a PHPCR QOM query with its new query builder counterpart:\n\nThe following two examples are equivalent and both select a blog posts\nwith node name \"My Post Title\" having the ODM class \"BlogPost\". We order\nthe result set first by publishing date and then by title.\n\nUsing the PHPCR QOM:\n\n~~~~ {.sourceCode .php}\ncreateQuery(\n // SourceInterface (from)\n $qom->selector('nt:unstructured', 'p')\n $qom->andConstraint(\n $qom->comparison(\n $qom->propertyValue('p', 'phpcr:class'),\n $qom->bindVariableValue('phpcr_class'),\n QueryObjectModelInterface::JCR_OPERATOR_EQUAL_TO\n ),\n $qom->comparison(\n $qom->nodeLocalName('p'),\n $qom->bindVariableValue('post_title'),\n QueryObjectModelInterface::JCR_OPERATOR_EQUAL_TO\n ),\n array(\n $qom->ascending($qom->propertyValue('published_on', 'p'))\n $qom->ascending($qom->propertyValue('title', 'p'))\n )\n )\n);\n$q->bindValue('phpcr_class', 'Blog\\Post');\n$q->bindValue('post_title', 'My Post Title');\n$res = $q->execute();\n~~~~\n\nUsing the new PHPCR-ODM query builder:\n\n~~~~ {.sourceCode .php}\ncreateQueryBuilder()\n ->fromDocument('Blog\\Post', 'p')\n ->where()\n ->eq()->field('p.title')->parameter('post_title')->end()\n ->end()\n ->orderBy()\n ->asc()->field('p.published_on')->end()\n ->asc()->field('p.title')->end()\n ->end()\n ->setParameter('post_title', 'My Post Title')\n ->getQuery();\n$res = $q->execute();\n~~~~\n\nWhilst the two examples above are equivalent it should be noted that we\nare being slightly unfair to the PHPCR QOM as we are forced to add the\n`phpcr:class` constraint, which is a PHPCR-ODMism. Despite this, the new\nAPI is clearly less verbose and, I hope, more intelligible.\n\nThe API allows chaining together operands:\n\n~~~~ {.sourceCode .php}\ncreateQueryBuilder();\n$qb\n ->from()\n ->document('Blog\\Post', 'p')\n ->end()\n ->where()\n ->andX()\n ->orX()\n ->eq()->upperCase()->field('p.username')->end()->literal('DANTLEECH')->end()\n ->eq()->field('c.initials')->literal('dtl')->end()\n ->end()\n ->lte()->field('p.published_on')->literal('2013-09-14')->end()\n ->end()\n ->end();\n~~~~\n\nThe API also allows you to break the query into multiple statements:\n\n~~~~ {.sourceCode .php}\nfrom()->document('Blog\\Post', 'p');\n$qb->where()->eq()->field('p.title')->literal('Foobar');\n$qb->orderBy()->asc()->field('p.title');\n~~~~\n\nAnd to add extra criteria to an existing query builder instance (useful\nif the query builder is instantiated and initialized by a vendor\nlibrary):\n\n~~~~ {.sourceCode .php}\nandWhere()->field('f.site_id')->literal(1);\n }\n}\n~~~~\n\nAs a bonus, the nature of the API also allows us to easily add multiple\nconstraints to `andX` and `orX` operator nodes, something not easily\ndone with the native PHPCR builder:\n\n~~~~ {.sourceCode .php}\nfromDocument('Blog\\Post', 'p');\n\n// we can add one or many constraints to an \"andX\" node...\n$qb->where()->andX()\n ->fieldIsset('p.username')\n ->gt()->field('p.rank')->literal(50)->end()\n ->eq()->fueld('p.title')->literal('This is a title');\n~~~~\n\nThe documentation is now online and is made up of both a guide and a\nreference:\n\n- Guide:\n [http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder.html](http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder.html)\n- Reference:\n [http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder-reference.html](http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder-reference.html)\n\n", - "date": "2013-09-25 00:00:00" + "contents": "Recently we have done some work to sort out our domain names and the\npermanent URL structure we will use from now on. We have put rules in\nplace to maintain all existing URLs so they redirect to\nwww.phpdoctrine.org, trac.phpdoctrine.org and svn.phpdoctrine.org. You\nwill need to update your svn externals to point to svn.phpdoctrine.org.\n", + "date": "2007-12-04 00:00:00" }, { - "url": "/2010/05/13/doctrine-mongodb-object-document-mapper.html", - "slug": "doctrine-mongodb-object-document-mapper", - "title": "Doctrine MongoDB Object Document Mapper", + "url": "/2010/05/12/a-few-website-changes.html", + "slug": "a-few-website-changes", + "title": "Website Updates", "authorName": "jwage", "authorEmail": "", - "contents": "A question asked to me many times by many different people over the last\nyear is, \"will Doctrine ever have any support for MongoDB?\". I have\nnever really had an answer because we haven't had any official plans to\nsupport it as it was so new to the database world and php so nobody\nreally knew much about it yet.\n\nA few weekends ago I decided to install MongoDB and give it a try. It\nwas pretty fun and interesting. I quickly learned that it being a\ndocument based storage system lends itself well to a object mapper so\nthe experimental [Doctrine MongoDB Object Document\nMapper](https://github.com/jwage/odm) was born.\n\nIntroducing Doctrine MongoDB Object Document Mapper (ODM)\n=========================================================\n\nMuch like the Doctrine 2 ORM, the ODM aims to provide transparent\npersistence for PHP 5.3.0+ objects. You will notice that the Doctrine 2\nORM and ODM infrastructure, style, interfaces, etc. are all very\nsimilar. Instead of an EntityManager like in the ORM you have the\nDocumentManager. Map your objects in the same way you do for the ORM.\nHere is an examle `User` document:\n\n~~~~ {.sourceCode .php}\nsetUsername('jwage');\n$user->setPassword('testing');\n\n$dm->persist($user);\n$dm->flush();\n~~~~\n\nNow if you have a look in MongoDB you will see a database named `my_db`\nand a collection named `users` containing a new document like the\nfollowing:\n\n array(\n '_id' => instanceof MongoId,\n 'username' => 'jwage',\n 'password' => 'testing'\n )\n\nWhen you query for and retrieve this document from the database later,\nDoctrine reconstructs the PHP object with the data from MongoDB:\n\n~~~~ {.sourceCode .php}\nfindOne('User', array('username' => 'jwage')); // instanceof User\necho $user->getUsername();\n~~~~\n\nBelow you can find an overview list of the features available:\n\n- Transparent persistence.\n- Map one or many embedded documents.\n- Map one or many referenced documents.\n- Create references between documents in different databases.\n- Map documents with Annotations, XML, YAML or plain old PHP code.\n- Documents can be stored on the\n [MongoGridFS](https://secure.php.net/MongoGridFS).\n- Collection per class(concrete) and single collection inheritance\n supported.\n- Map your Doctrine 2 ORM Entities to the ODM and use mixed data\n stores.\n- Inserts are performed using\n [MongoCollection::batchInsert()](http://us.php.net/manual/en/mongocollection.batchinsert.php)\n- Updates are performed using \\$set instead of saving the entire\n document.\n\nGetting Started?\n================\n\nWe've put together a little documentation to help you get familiar with\nthe ODM quickly.\n\n- [Reference\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/en)\n- [Getting Started Cookbook\n Article](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/cookbook/getting-started/en)\n- [API\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/api)\n\nHow can I contribute?\n=====================\n\nGet your fork on! All you need to do is fork a Doctrine\n[repository](https://github.com/doctrine) on github.com and [submit your\nmodifications](https://github.com/guides/fork-a-project-and-submit-your-modifications/7)\nto us by sending a pull request.\n\nYou can also take part in discussions on our [mailing\nlist](https://groups.google.com/forum/#!forum/doctrine-user) or join \\#doctrine\non irc.freenode.net for live support from the community.\n", - "date": "2010-05-13 00:00:00" + "contents": "As you probably already noticed, the Doctrine website looks a little bit\ndifferent. In preparation for the Doctrine 2.0 release, the website\nneeded to be improved a little bit to better handle the multiple\nversions and projects under the Doctrine umbrella. Along the way I did a\nlittle spring cleaning of some code from the early Doctrine days as\nwell!\n\nYou can now find dedicated sections of the website for both the Object\nRelational Mapper and Database Abstraction Layer projects:\n\n- [ORM Project](https://www.doctrine-project.org/projects/orm)\n- [DBAL Project](https://www.doctrine-project.org/projects/dbal)\n\nThe new website also introduces a new API Documentation thanks to [PHP\nDoctor](http://peej.github.com/phpdoctor/)!\n\n- [Doctrine 2 ORM API\n Documentation](https://www.doctrine-project.org/projects/orm/2.0/api)\n- [Doctrine 2 DBAL API\n Documentation](https://www.doctrine-project.org/projects/dbal/2.0/api)\n\nIf you have any problems with the website please let me know by e-mail\nat jonwage [at] gmail.com.\n", + "date": "2010-05-12 00:00:00" }, { - "url": "/2011/05/16/doctrine-2-1-beta-release.html", - "slug": "doctrine-2-1-beta-release", - "title": "Doctrine 2.1 Beta and Backwards Compatibility Competition", - "authorName": "beberlei", + "url": "/2015/03/22/data-fixtures-1-0-1.html", + "slug": "data-fixtures-1-0-1", + "title": "Doctrine Data Fixtures 1.0.1", + "authorName": "Sebastien Lavoie", "authorEmail": "", - "contents": "We would like to announce the first beta release of Doctrine 2.1. It is\npacked with new features that will make your life easier:\n\n- **Indexed associations:** You can force Doctrine to hydrate\n collection elements by using a field of the target entity as key,\n for example the ID or any unique field. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/working-with-indexed-associations.html).\n- **Extra Lazy Collections:** Instead of always initializing the\n complete collection in memory you can now mark a collection as extra\n lazy, leading to special SQL executed for Collection\\#count(),\n Collection\\#contains() and Collection\\#slice(). This allows to\n implement efficient pagination on collections without having to use\n DQL. It also allows to save some memory for common use-cases with\n very large collections. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/extra-lazy-associations.html).\n- **Identity through Foreign Entities or derived entities:** You can\n now use a foreign key as identifier of an entity. This translates to\n using @Id on a @ManyToOne or @OneToOne association. You can read up\n on this [feature in the\n tutorial](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/composite-primary-keys.html#identity-through-foreign-entities).\n- **Persister Refactoring:** Instead of reimplementing hydration in\n the persisters we now use the hydration mechanism that is used by\n DQL aswell. Sadly performance for hydration in the persisters drops\n by 5-25% for different use-cases. It starts with a drop of 5% for a\n few hydrations and increases the more hydrations you are doing in a\n request. As a benefit we could remove tons of code and use several\n optimizations that actually increase performance when using\n fetch=\"EAGER\" in ManyToOne and OneToOne associations. Furthermore\n inverse OneToOne associations previously always executed an\n additional query, which is now replaced with a join.\n- **Temporary fetch mode in DQL** On a DQL Query you can now call\n \\`\\$query-\\>setFetchMode(\\$\\`className, \\$assocName, \\$fetchMode) to\n temporarily set the fetch mode to a value different from the one\n defined in the Association Mapping. If you set a ManyToOne or\n OneToOne association to eager fetching Doctrine will use a batch\n WHERE id IN (..) query to fetch all entities in a single query.\n- **Binding Arrays to a Query:** Doctrine now implements low-level\n support for binding arrays to named or positional parameters. This\n is possible with the Doctrine::TYPE\\_INT\\_ARRAY and\n Doctrine::TYPE\\_STR\\_ARRAY parameters that you have to pass as types\n to a query you want to use this feature in. EntityRepository now\n supports passing arrays as values to a field and uses an IN query.\n- **EntityRepository Limit and OrderBy:** The method\n EntityRepository\\#findBy() now accepts additional parameters for\n ordering, limit and offset.\n- **ResultSetMapping Helper:** There is now a class that simplifies\n populating a ResultSetMapping based on an existing ClassMetadata\n instance.\n- **Zero Based Parameters in Queries:** You can now start with the\n parameter ?0 in DQL queries.\n- **Named DQL Queries in Metadata:** You can add dql queries in the\n mapping files using @NamedQueries(@NamedQuery(name=\"foo\",\n query=\"DQL\")) and access them through\n \\$em-\\>getRepository()-\\>getNamedQuery().\n- **Date related DQL functions:** Suport for DATE\\_ADD(), DATE\\_SUB()\n and DATE\\_DIFF() in DQL.\n- **New console command orm:info:** Gives details about all registered\n entities and if their mappings are valid or not.\n- **Read Only Entities:** You can set the attribute readOnly=true on\n an entity. This will only allow to persist new instances of this\n entity or removing them, they will never be considered for updating,\n thus allowing for performance optimizations where these entities are\n not considered in the UnitOfWork changeset computations.\n- **SQL Query Object:** There is now an SQL Query object in the\n Doctrine project. You can create an instance with\n \\$connection-\\>createQueryBuilder().\n- **Automatic Parameter Type Inference:** For certain parameters types\n such as integer and DateTime ORM Query::setParameter can now\n automatically infer the type instead of requiring manually passing\n the values as third parameter.\n\nDocumentation for all the feature will be updated in the next weeks. The\nrelease is planned for June 30th 2011.\n\nWith all this new features, some of them requiring large internal\nrefactorings, we want to assure that Doctrine 2.1 is backwards\ncompatible with Doctrine 2.0. Our testsuite ensuring backwards\ncompatibility is very large, but we cannot be sure that we test for\nevery edge case. That is where you as Doctrine-user come into play:\nPlease test Doctrine 2.1 with your applications and give us feedback\nabout backwards compatibility. Please report any problem on Jira or\nwrite a mail to the doctrine-user or doctrine-dev mailing list.\n\nAnyone finding a backwards incompatible change gets an honorable mention\nin the release notes and some may even get small presents! (This only\napplies to versions \\>= Doctrine 2.0.0 with no customizations and people\nliving in countries with reasonable shipping rates :-)).\n", - "date": "2011-05-16 00:00:00" + "contents": "We are happy to announce the immediate availability Doctrine Data\nFixtures `1.0.1`.\n\nIn all [semver](https://semver.org/) fashion, this is a bug fix release.\n\nWhat is new in 1.0.x?\n=====================\n\nPlease report any issues you may have with the update on\n[Github](https://github.com/doctrine/data-fixtures/issues).\n\n- Added Travis:\n [69c2230](https://github.com/doctrine/data-fixtures/commit/69c2230dd15413cac013626729c30923632cf313)\n- Now supports table quoting for dropping joined tables:\n [\\#180](https://github.com/doctrine/data-fixtures/pull/180)\n- Fixed ProxyReferenceRepository which was forcing to have a getId:\n [8ffac1c](https://github.com/doctrine/data-fixtures/commit/8ffac1c63f34124f693b93889fa32f4036eb241b)\n- Fixed identifiers retrieval on ReferenceRepository if Entity is not\n yet managed my UnitOfWork:\n [dfc0dc9](https://github.com/doctrine/data-fixtures/commit/dfc0dc9a3f6258c878768218fe49cc092ea8a8d1)\n- Doctrine dependencies relaxed:\n [83a910f](https://github.com/doctrine/data-fixtures/commit/83a910f62b01715f3ed7317f5a4996417a698177)\n- Fix purging non-public schema tables:\n [\\#171](https://github.com/doctrine/data-fixtures/pull/171)\n\nRelease RoadMap\n===============\n\nWe expect to release following versions containing the pending patches\nin the next days:\n\n> - `1.1.0` on `2015-03-26`\n> - `1.2.0` within `2015-04`\n\nPlease note that these dates may change depending on the availability of\nour team.\n", + "date": "2015-03-22 00:00:00" }, { - "url": "/2009/01/30/new-documentation-pdf-downloads.html", - "slug": "new-documentation-pdf-downloads", - "title": "New Documentation PDF Downloads", - "authorName": "jwage", + "url": "/2009/09/14/moving-to-jira.html", + "slug": "moving-to-jira", + "title": "Moving to JIRA", + "authorName": "romanb", "authorEmail": "", - "contents": "Today we have some great news! Thanks to Fabien from the [symfony\nproject](http://www.symfony-project.org) , we now have a new way to\ngenerate the PDF version of our documentation. The new PDFs are a MAJOR\nstep up from the previous style of PDF and am very pleased with it!\nCheck it out by viewing the 1.0 version of [The Guide to Doctrine for\nPHP](https://www.doctrine-project.org/documentation/manual/1_0/en/pdf) or\n[The Doctrine\nCookbook](https://www.doctrine-project.org/documentation/cookbook/1_0/en/pdf).\n\nWhat is next?\n=============\n\n- API Documentation available as PDF.\n- Downloadable package/zip file containing PDF versions of all\n documentation.\n- User submitted articles, snippets, tutorials, etc. to complement the\n official documentation.\n- ...Printed book.\n\nPrinted Book\n============\n\nHere is a teaser of the first draft of the front cover for the printed\nversion of the book. Big thanks goes out to Jason O'Brien from\ncentre{source} for doing the design work. The printed copy will be\navailable on lulu very soon we just need to do some more proof reading\nand Q&A on everything before it is ready. The printed version of the\nbook will use a slightly modified version of the PDF that is available\nfor download on the web.\n", - "date": "2009-01-30 00:00:00" + "contents": "While we really like Trac, especially its subversion integration, it has\na lot of shortcomings for bigger projects in the area of project &\nissue/ticket management. Hence we decided to evaluate alternatives and\nended up with choosing [JIRA](https://www.atlassian.com/software/jira).\nIts normally not free software but the generous guys from Atlassian\ngranted us a free open source license. A big thanks from all of us to\nAtlassian for their support of open source projects.\n\nFrom now on all the project management, release management and\nissue/ticket management will happen in our [new JIRA\ninstance](https://www.doctrine-project.org/jira). While it is open for\neveryone in read-only mode, we strongly encourage you to create an\naccount soon so that you can create/modify/comment issues and content in\nJIRA.\n\nTrac is from now on closed for tickets. All new tickets need to be\nreported through JIRA. We are not going to automatically import all\ntickets from Trac to JIRA because that does not work very well and would\nrequire to import all user accounts as well, which can not be done\neasily either. We will continue to work on the \"old\" tickets, always\nstarting with porting a ticket over to JIRA before working on it. If you\nwant to help, you recreate tickets that are especially important to you\nin JIRA yourself. You can still log in to Trac and view tickets for the\npurpose of migrating them to JIRA but you can not modify them or create\nnew ones.\n\n> **CAUTION** When you recreate an issue in JIRA, please make sure you\n> close the issue in Trac with the resolution: \"migrated\".\n\nTrac will not be completely shut down, however. The following\nfunctionality will stay open:\n\n- Wiki\n- Timeline\n- Browse Source\n\nThat is, the wiki and the subversion integration. We basically use Trac\nas the subversion viewer that we coupled with JIRA. Any changeset\nnumbers or file references in JIRA issues will link to the\nchangesets/sources in Trac.\n\nWe're looking forward to working with JIRA and we think it is an\nimprovement for all users. We hope you enjoy all the new functionality\nprovided by JIRA, like voting for issues that are important to you,\ntracking issues and much more.\n\nSo, head over to our [JIRA instance](https://www.doctrine-project.org/jira) ,\ncreate an account and start creating issues and explore the features.\n", + "date": "2009-09-14 00:00:00" }, { - "url": "/2011/04/07/doctrine2-april-2011-maintenance.html", - "slug": "doctrine2-april-2011-maintenance", - "title": "Maintenance Releases of Common, DBAL, ORM", - "authorName": "beberlei", + "url": "/2013/09/11/doctrine-2-4-released.html", + "slug": "doctrine-2-4-released", + "title": "Doctrine 2.4 released", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "Slightly behind schedule, but we released the next round of maintenance\nversions of Doctrine Common (2.0.2), DBAL (2.0.4) and ORM (2.0.4) today.\n\n- [Common Changelog (4 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10121)\n- [DBAL Changelog (3 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10131)\n- [ORM Changelog (13 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10130)\n\nYou can grab the packages from the download page or our [Github\nrepository](https://github.com/doctrine).\n\nPlease report any problems to the Jira Bugtracker.\n", - "date": "2011-04-07 00:00:00" + "contents": "We are happy to announce the availability of Doctrine Common, DBAL and\nORM versions 2.4. This took us much longer than planned and we are very\nsorry for all the delay that was mostly caused by contributers private\nand work lifes. For the next versions we will also try to keep the scope\nsmaller, you will see that version 2.4 contains lots of small new\nfeatures.\n\nStarting with version 2.4 Doctrine will not be available over PEAR\nanymore. The maintenance of this deployment channel is too complicated,\ncompared to the small number of people using it. We focus on shipping\nDoctrine with [Composer](https://getcomposer.org) , which is a superior\npackaging tool in our opinion. We will continue to make Doctrine\navailable as standalone download through the Github releases pages.\n\nFollow the links in the list to find the changelogs of the three new\nreleases:\n\n- [Doctrine Common v2.4.1\n Changelog](https://github.com/doctrine/common/releases/tag/v2.4.1)\n- [Doctrine DBAL v2.4.0\n Changelog](https://github.com/doctrine/dbal/releases/tag/v2.4.0)\n- [Doctrine ORM v2.4.0\n Changelog](https://github.com/doctrine/orm/releases/tag/v2.4.0)\n\nBackwards Incompatible Changes\n==============================\n\nThere have been some BC breaks in the 2.4 releases, which are listed\nhere:\n\n- DoctrineDBALSchemaConstraint API change\n- Compatibility Bugfix in PersistentCollection\\#matching()\n- Composer is now the default autoloader\n- OnFlush and PostFlush event always called\n- DQL: Parenthesis are now considered in arithmetic expression\n\nYou can read up in detail on BC breaks on the\n[DBAL](https://github.com/doctrine/dbal/blob/2.4/UPGRADE) and\n[ORM](https://github.com/doctrine/orm/blob/2.4/UPGRADE.md) UPGRADE\ndocs.\n\nInstallation\n============\n\nYou can install Doctrine using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/common\": \"2.4.*\",\n \"doctrine/dbal\": \"2.4.*\",\n \"doctrine/orm\": \"2.4.*\"\n }\n}\n~~~~\n\nNew Features\n============\n\nThis release contains large amount of new features and improvements.\nCompared to the previous minor release not so many big-bang features,\nbut many small improvements. The most important changes are listed here\nwith small examples or links to their documentation.\n\n- ALTER TABLE support for SQLite (by\n [hason](https://github.com/hason)) by creating new tables, moving\n all the data and then renaming.\n- Using \\`EXTRA\\_LAZY\\` fetch mode now also queries for single\n entities on collections with `indexBy` when using\n `$collection->get()` or accessing the collection via array access.\n- Added two new modes to proxy generation for development\n environemnts, first using `eval` and second by checking if the proxy\n file not exists.\n- Pass Event Arguments to entities lifecycle methods, allowing access\n to `EntityManager`.\n- Allow to order by associations when using\n `EntityRepository#findBy()`.\n- Support for new \\`NEW()\\` operator in DQL which can be wrapped\n around the full `SELECT`-clause parts and instantiates an object by\n passing the parameters to the constructor. See the\n [documentation](http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#new-operator-syntax)\n for more details.\n- Support for `@EntityListener` annotation and XML/YML configuration,\n which allows adding listener services on a per entity level (not\n global). See the\n [documentation](http://docs.doctrine-project.org/en/latest/reference/events.html#entity-listeners)\n for details.\n- Improved the `ResultSetMapping` to generate the `SELECT` clause for\n an SQL statement, thereby improving the usability of native queries\n alot. See the\n [documentation](http://docs.doctrine-project.org/en/latest/reference/native-sql.html#resultsetmappingbuilder)\n for more details.\n- Introduced a factory for repositories that can be overwritten in the\n `Doctrine\\ORM\\Configuration`.\n- Added an interface for `EntityManager` called\n `Doctrine\\ORM\\EntityManagerInterface` and a decorator base class\n `Doctrine\\ORM\\Decorator\\EntityManagerDecorator`.\n- Support for proxy objects for entities with public properties.\n- Add support for composite primary keys in DQL `IDENTITY()` function.\n See the\n [documentation](http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html#dql-select-examples)\n for more details.\n- Introduced ANSI SQL Quoting Strategy that does not attempt to quote\n and modify columns during SQL generation.\n- Joins between arbitrary entities are now possible in DQL by using\n the syntax `FROM Foo f JOIN Bar b WITH f.id = b.id`.\n\nDocumentation\n=============\n\nWith 2.4 we merged the documentation into the repositories itself. We\nhave seen a much increased amount of Pull Requests since then and also\nimproved the documentation ourselves quite alot for 2.4.\n\nBesides fixes and additions of all the new features, we tried to improve\nthe style of the documentation. Many of the chapters have been\nrefactored completly and hopefully address many of the valid concers of\nour users.\n", + "date": "2013-09-11 00:00:00" }, { - "url": "/2008/06/21/doctrine-in-your-language.html", - "slug": "doctrine-in-your-language", - "title": "Doctrine in your language", - "authorName": "jwage", + "url": "/2015/04/01/indoctrinator-0-0-1-alpha-1.html", + "slug": "indoctrinator-0-0-1-alpha-1", + "title": "Indoctrinator 0.0.1-alpha1", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the start of development on a new project\ncalled **the indoctrinator**.\n\nWhat is Indoctrinator?\n======================\n\nFor various months, we tried to implement a way to validate the correct\nusage of the Doctrine Project mapping tools. This sort of validation\nlogic includes:\n\n- immutability checks/suggestions\n- number of generated DB queries/hits reduction\n- memory impact control\n- hydration profiling\n- code generator avoidance\n- DDD (Domain Driven Development) entity class/method naming\n conventions\n- ... and much more!\n\nWe decided to put these validation rules into a project.\n\nHow does Indoctrinator work?\n============================\n\nIndoctrinator is currently only working with `doctrine/orm` version\n`2.5.x-dev`, but the general working concept is as following:\n\n```php\n$indoctrinator = new Doctrine\\Indoctrinator();\n\n$indoctrinator->registerWithManager(new Doctrine\\Indoctrinator\\ManagerWrapper($entityManager));\n```\n\nWithout going into much details, Indoctrinator hooks into common APIs\nused in ORM internals, and by using AOP (Aspect Oriented Programming),\nit catches common mistakes and issues and produces exceptions or log\nmessages that \"indoctrinate\" the user on correct toolchain usage.\n\nRelease RoadMap\n===============\n\nIndoctrinator is still in early development, but our plan is to release\nit with bindings for major editors and IDEs used in the PHP community.\n\nThe current version is `0.0.1-alpha1`, and is released as a `phar`\narchive for now.\n\nDevelopment will likely take 6 or more months, while we stabilize the\nAPI and make the various mapper projects compatible with it.\n\nHow to get Indoctrinator?\n=========================\n\nIndoctrinator has its own dedicated [documentation section in the\ndoctrine\nwebsite](https://www.doctrine-project.org/projects/indoctrinator.html).\n\nReporting Issues\n================\n\nPlease report any issues you may have with the project on the mailing\nlist or on [JIRA](https://www.doctrine-project.org/jira/browse/).\n", + "date": "2015-04-01 00:00:00" + }, + { + "url": "/2009/08/15/doctrine2-native-queries.html", + "slug": "doctrine2-native-queries", + "title": "Doctrine 2 Native Queries", + "authorName": "romanb", "authorEmail": "", - "contents": "I have been waiting for this day for some time, the day we have the\nmanual in a 2nd language. For many months the website has been capable\nof handling multiple languages but the features have not been exposed\nuntil now. Thanks to Masaki and Takeshi, two very experienced Japanese\nsymfony + Doctrine developers, we now have the Doctrine manual available\nin Japenese. The primary text of the website will also be translated in\nthe following weeks. If you are interested in having the Doctrine\nwebsite and manual in your language, please contact me so we can make\narrangements for you to have access to easily provide translations.\n", - "date": "2008-06-21 00:00:00" + "contents": "If you are familar with Doctrine\\_RawSql from Doctrine 1.x you probably\nknow that it is somewhat broken by design since it requires a special\nsyntax in the select clause that makes a lot of SQL constructs in the\nselect clause impossible.\n\nDoctrine 2 introduces a facility called \"native queries\", represented by\nthe `Doctrine\\ORM\\NativeQuery` class that replaces Doctrine\\_RawSql. The\nclue about NativeQuery is that it allows the usage of real native SQL\nyet the result can be transformed into all the different formats that\nare supported by DQL.\n\nThis is achieved through having a generic description of how an SQL\nresult maps to a Doctrine result in form of a\n`Doctrine\\ORM\\Query\\ResultSetMapping`.\n\nEnough of the introductory talk, lets look at a (primitive) example from\nour test suite:\n\n~~~~ {.sourceCode .php}\naddEntityResult('Doctrine\\Tests\\Models\\CMS\\CmsUser', 'u');\n$rsm->addFieldResult('u', 'id', 'id'); // ($alias, $columnName, $fieldName)\n$rsm->addFieldResult('u', 'name', 'name'); // // ($alias, $columnName, $fieldName)\n\n$query = $this->_em->createNativeQuery('SELECT id, name FROM cms_users WHERE username = ?', $rsm);\n$query->setParameter(1, 'romanb');\n\n$users = $query->getResult();\n\n$this->assertEquals(1, count($users));\n$this->assertTrue($users[0] instanceof CmsUser);\n$this->assertEquals('Roman', $users[0]->getName());\n~~~~\n\nThe SQL that is passed to createNativeQuery is not touched by Doctrine\nin any way. The NativeQuery and ResultSetMapping combination are\nextremely powerful. It might not surprise you that Doctrine 2 creates a\nResultSetMapping internally when it transforms DQL to SQL.\n\nGranted, this was a very trivial example that can easily be expressed in\na short DQL 1-liner but it was just for demonstration purposes (and I am\nbad at making up complex ad-hoc SQL examples that make sense).\n\nSo when is this useful? While DQL has been heavily improved in Doctrine\n2 and has many new powerful features which we will cover in future blog\nposts, it is sometimes necessary to use native SQL. NativeQuery gives\nyou the ability to do that while still retrieving the results in the\nconvenient Doctrine formats you are familar with. NativeQuery is also an\nobvious choice when starting to migrate a pure SQL project to Doctrine\nwithout going into all the DQL details from the start.\n\nMore on NativeQuery and ResultSetMapping can be found in the new\ndocumentation under:\n\n[Documentation - Native\nSql](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/native-sql.html#native-sql)\n", + "date": "2009-08-15 00:00:00" }, { - "url": "/2009/05/11/doctrine-1-0-9-and-1-1-1-released.html", - "slug": "doctrine-1-0-9-and-1-1-1-released", - "title": "Doctrine 1.0.9 and 1.1.1 Released", + "url": "/2009/06/15/doctrine-1-0-10-and-1-1-2-released.html", + "slug": "doctrine-1-0-10-and-1-1-2-released", + "title": "Doctrine 1.0.10 and 1.1.2 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am very happy to make available two new releases of Doctrine for\nthe 1.0 and 1.1 code bases. These are both significant bug fix releases\nand it is recommended that you upgrade right away.\n\n- [1.1.1](https://www.doctrine-project.org/download/1_1_1/format/tgz)\n- [1.0.9](https://www.doctrine-project.org/download/1_0_9/format/tgz)\n\nYou can find more information about these releases as usual on the\n[download](https://www.doctrine-project.org/download) page.\n", - "date": "2009-05-11 00:00:00" + "contents": "Today I am happy to release two new maintenance releases for Doctrine.\nAs usual we have a new version for the 1.0 branch and a new version for\nthe 1.1 branch. The new versions can be gotten on the\n[Download](https://www.doctrine-project.org/download) page.\n\nYou can review the changelogs for\n[1.0.10](https://www.doctrine-project.org/change_log/1_0_10) and\n[1.1.2](https://www.doctrine-project.org/change_log/1_1_2) to see what\nall issues have been addressed in these releases.\n\nOn a side note, development on the Doctrine 1.2 version will begin very\nsoon so if you have any ideas or features you'd like to see in this\nversion please bring them to our attention and we may be able to address\nthem in this version. We plan for the 1.2 version to concentrate on bug\nfixes, performance fixes and small features to make the use of the 1.x\nversion of Doctrine more enjoyable without any major BC breaks.\n", + "date": "2009-06-15 00:00:00" }, { - "url": "/2017/12/21/orm-2-6-0-and-next.html", - "slug": "orm-2-6-0-and-next", - "title": "Doctrine ORM 2.6 and Next (3.0)", - "authorName": "Mike Simonson", - "authorEmail": "mike@simonson.be", - "contents": "We are happy to announce the immediate availability of Doctrine ORM [2.6.0](https://github.com/doctrine/orm/releases/tag/v2.6.0).\n\nORM 2.6.0\n=========\n\nThis release contains almost 3 years of active development and it\nprovides several improvements and fixes, including:\n\n- Better commit order calculation\n- More stable second level cache\n- Strict testing and quality control\n- PHP 7.1+ requirement\n\n[changelog](https://github.com/doctrine/orm/releases/tag/v2.6.0).\n\nNext?\n=====\n\nThis release marks the feature freeze of the 2.x version.\n\nIf you need to improve please work on the develop branch that will\nbecome the 3.0 branch in the coming days. The changes are already too\nnumerous to easily rebase a feature from the 2.x branch to the develop\none.\n", - "date": "2017-12-21 00:00:00" + "url": "/2016/02/16/doctrine-mongodb-odm-release-1.0.5.html", + "slug": "doctrine-mongodb-odm-release-1.0.5", + "title": "Doctrine MongoDB ODM release 1.0.5", + "authorName": "Maciej Malarz", + "authorEmail": "malarzm@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.0.5](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.5).\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#105-2016-02-16).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.5\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.5).\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0.5\"\n }\n}\n```\n\nDoctrine MongoDB ODM and PHP 7\n==============================\n\nWhile ODM still relies on legacy MongoDB driver ([i.e.\next-mongo](https://pecl.php.net/package/mongo)) and no dates are\nscheduled for the 2.0 release, it is possible to run ODM's development\nbranch with the new MongoDB driver (i.e.\n[ext-mongodb](https://secure.php.net/manual/en/mongodb.installation.php)) on\nPHP 7 and HHVM! [(see: this\ntweet)](https://twitter.com/alcaeus/status/697659616172359680) The new\ndriver should be properly supported once we release versions 1.1 and 1.3\nof the ODM and underlying [Doctrine\nMongoDB](https://github.com/doctrine/mongodb) library, respectively.\nThis is all possible thanks to our Andreas Braun's\n([@alcaeus](https://twitter.com/alcaeus)) work on\n[mongo-php-adapter](https://github.com/alcaeus/mongo-php-adapter)\nwhich implements `ext-mongo's` API atop `ext-mongodb` and\n[mongodb-php-library](https://github.com/mongodb/mongo-php-library).\"\nIf you can't wait to give ODM a test flight on PHP 7, now is the time!\nAlso, if you happen to meet Andreas be sure to buy him a beer :)\n", + "date": "2016-02-16 00:00:00" + }, + { + "url": "/2014/01/01/dbal-242-252beta1.html", + "slug": "dbal-242-252beta1", + "title": "DBAL 2.4.2 and 2.5.0 BETA1 released", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "*Published: 01.01.2014*\n\nWe are happy to announce the immediate availability of Doctrine DBAL\n2.4.2 and 2.5.0 BETA1.\n\nThe new stable version 2.4.2 had 20 bugs fixed. You can install this\nversion using Composer and the following `composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/dbal\": \"2.4.2\"\n }\n}\n~~~~\n\nYou can see all the changes on Jira:\n\n- [DBAL\n 2.4.2](https://github.com/doctrine/dbal/releases/tag/v2.4.2)\n\nIn the first 10 month of 2013 we watched the number of open issues cross\n100 and peak at 250 in mid November, unable to do much about it due to\ntime constraints. During the last two months however we have worked hard\nto lower the number of open pull-requests on DBAL from 50 to only 7 and\npush the number of open issues on DBAL+ORM down to 188 from 250. This\nhas been a tremendous effort and it would not have been possible without\nour two new core team members [deeky666](https://github.com/deeky666)\nand [kimhemsoe](https://github.com/kimhemsoe).\n\nWith the number of open bugs at 22 and open pull requests at 7 I am\nexcited to say that DBAL 2.5 will be the most stable and complete\nversion so far. It is mostly backwards compatible with only some minor\nchanges necessary, when using PDO IBM, creating a custom platform or\nusing non-default DateTime formats. You can see the breaks in the\n[UPGRADE.md](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\nfile.\n\nThere is also a nice list of new features:\n\n- Support for SAP Sybase SQL Anywhere versions 10, 11, 12 and 16\n (DBAL-475)\n- Support for auto-commit=NO on all drivers and platforms. (DBAL-81)\n- Refactor exceptions to use common error-codes and exception classes\n that derive from `Doctrine\\DBAL\\DBALException`. (DBAL-407)\n- Add support to retry connections with\n `Doctrine\\DBAL\\Connection#ping()` method. (DBAL-275)\n- Add INSERT support to QueryBuilder (DBAL-320)\n- Add Binary type for VARBINARY support (DBAL-714)\n- Add charset and SSL connection support to PostgreSQL (DBAL-567,\n DBAL-702)\n- Add options support for Myqli (DBAL-643)\n\nSee all the changes for the 2.5.0 BETA1 on Jira:\n\n- [DBAL 2.5.0\n BETA1](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10523)\n\nYou can install the BETA using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/dbal\": \"2.5.0-BETA1\"\n }\n}\n~~~~\n", + "date": "2014-01-01 00:00:00" + }, + { + "url": "/2014/10/16/dbal-243.html", + "slug": "dbal-243", + "title": "DBAL 2.4.3 released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n2.4.3, which fixes various bugs discovered during DBAL 2.5.x\ndevelopment.\n\nYou can find all the changes on JIRA:\n\n- [DBAL\n 2.4.3](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10622)\n - 10 issues fixed\n\nYou can install the DBAL using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/dbal\": \"2.4.3\"\n }\n}\n~~~~\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2014-10-16 00:00:00" }, { "url": "/2010/05/13/the-switch-to-git.html", @@ -1413,508 +1242,499 @@ "date": "2010-05-13 00:00:00" }, { - "url": "/2007/12/03/beta2_released.html", - "slug": "beta2_released", - "title": "Beta 2 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "On Friday November 30th, the second beta release of the PHP5 Doctrine\nORM software was released. A lot of progress has been made since the\nfirst beta(formerly known as RC1). Dozens and dozens of tickets have\nbeen fixed, new features have been added, much needed re-factorings have\ntaken place and the community behind Doctrine is growing daily.\n", - "date": "2007-12-03 00:00:00" + "url": "/2019/09/30/mongodb-odm-1.3.0-and-2.0.0-RC2.html", + "slug": "mongodb-odm-1.3.0-and-2.0.0-RC2", + "title": "Doctrine MongoDB ODM 1.3.0 and 2.0.0-RC2 released", + "authorName": "Andreas Braun", + "authorEmail": "alcaeus@doctrine-project.org", + "contents": "The Doctrine team is proud to announce that MongoDB ODM 1.3.0 and 2.0.0-RC2 have\nbeen released. These releases are the culmination of a long effort to migrate\nthe ODM away from the legacy `mongo` extension to the new MongoDB driver\n(`mongodb` extension and PHP library). This results in a number of BC breaks for\nusers, but will enable us to add many new features in future releases, among\nthem support for multi-document transactions.\n\nMongoDB ODM 1.3.0 is a compatibility release targeted for users of the legacy\nextension that want to migrate to MongoDB ODM 2.0. It helps identify BC breaks\nby throwing deprecation notices and offering a forward compatibility layer where\npossible. To efficiently find usages of deprecated code, you can use the PHPUnit\nbridge developed by Symfony\n([symfony/phpunit-bridge](https://github.com/symfony/phpunit-bridge)) which logs\nall deprecation notices encountered during a run of PHPUnit. You can read more\nabout this component in the\n[Symfony documentation](https://symfony.com/doc/current/components/phpunit_bridge.html).\n\nMongoDB ODM 2.0.0RC-2 is the recommended package to use for those starting new\nprojects with MongoDB ODM. It ensures that you use the modern API for ODM\nwithout having to worry about deprecations. While this is still a release\ncandidate, it is planned to make this version the next stable MongoDB ODM\nrelease.\n\nWhat\u2019s new in MongoDB ODM 2.0?\n==============================\n\nMost importantly, this version no longer uses the legacy `mongo` extension. That\nextension is no longer maintained and does not support server versions beyond\nMongoDB 3.0. The new MongoDB driver ensures that MongoDB ODM can leverage\nfeatures and improvements contained in newer MongoDB versions, such as support\nfor multi-document transactions, retryable reads, retryable writes, change\nstreams, and much more.\n\nChanging the driver also means significant changes to some APIs. Most\nimportantly, the GridFS API has been rewritten from scratch to conform with\nMongoDB\u2019s GridFS spec for drivers. If you\u2019ve used GridFS before, this will be a\nbig change for you, but the new API is much simpler and cleaner to use. Check\nout the\n[GridFS documentation](https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/storing-files-with-mongogridfs.html#storing-files-with-gridfs)\nto find out how to use the new API. Unfortunately, we cannot provide a forward\ncompatibility layer for this, as re-implementing this API atop the legacy driver\nis not feasible.\n\nLazy reference support has been changed completely and no longer uses proxy\nobjects from the deprecated doctrine/common library. Instead, it builds on\n`ocramius/proxy-manager`, which gives us access to more advanced features like\npartial proxy loading, which we will start leveraging in future releases.\n\nIn 2.0 we dropped support for the YAML mapping of documents. This step was\nnecessary to both reduce the complexity of the code base and lower the burden of\nmaintaining multiple mapping drivers. If you are currently using YAML mappings,\nwe provide a console command to migrate YAML mappings to the XML format. We are\ncurrently working on an alternative that allows for a more flexible mapping\nconfiguration system, but this is not ready yet and will only be provided in a\nfuture 2.x release.\n\nMigrating to MongoDB ODM 2.0\n============================\n\nIf you are using MongoDB ODM 1.x, the upgrade consists of multiple steps. First,\nensure that you are fulfilling the necessary requisites for MongoDB ODM 2.0:\n* PHP version 7.2 or newer\n* ext-mongodb 1.5.0 or newer\n* mongodb/mongodb library 1.4.0 or newer\n* MongoDB 3.0 or newer\n\nIf you are already running PHP 7, you will most likely already be running\next-mongodb as the legacy extension is not available for PHP 7. If you are still\nrunning PHP 5.x, it is recommended that you migrate to PHP 7 before attempting\nto use a newer ODM version. You can do so by following the instructions on\nrunning ODM 1.x on PHP 7.\n\nOnce you fulfill all dependencies, the first step is updating to the latest 1.3\nrelease of MongoDB ODM. If you are using Symfony, you also need to upgrade the\nODM bundle to its latest\n[3.6 version](https://github.com/doctrine/DoctrineMongoDBBundle/releases/tag/3.6.0).\nOnce this is done, you can start fixing any deprecation notices that you find.\nThis should be a familiar process for any existing Symfony users. We tried to\nprovide compatibility layers where possible; unfortunately, we could not do so\nin all cases.\n\nThe next step is upgrading to ODM 2.0 directly. For many users, this step\nshouldn\u2019t be a problem thanks to the compatibility layer in 1.x. There may be\nsome necessary changes depending on the features you use (e.g. GridFS).\n\nWhat\u2019s next for MongoDB ODM\n===========================\n\nDuring the past few years, we focussed our limited development time almost\nexclusively on the driver migration, which came at the expense of supporting new\nfeatures in MongoDB. We plan to add support for many of those features in future\nreleases. You can get an overview of what\u2019s planned by checking the roadmap. If\nyou are looking for a specific feature, please let us know in the issue tracker.\n\nWhile not exhaustive or guaranteed, these are some of the features we plan to\nimplement in future releases:\n* Support for multi-document transactions (on-demand and implicit while flushing\n the Document Manager)\n* Support for new aggregation pipeline stages and operators\n* Support for the $expr query operator\n* Support for aggregation pipelines in update operations\n* Support for reading documents from views instead of collections\n* Atomic updates for collections using new array update operators\n\nSupport timeline\n================\n\nWith these releases, we\u2019re also introducing our new support timeline. Along with\nthe two releases announced above, we are also releasing the end-of-life release\nfor MongoDB ODM 1.2. We will not support MongoDB ODM 1.2 any more and encourage\nusers to upgrade to 1.3. Since 1.3 has no additional requirements over 1.2,\nupgrading should be possible for all users of ODM 1.2.\n\nMongoDB ODM 1.3 will be supported for at least 6 months after the first stable\nrelease of ODM 2.0. We will communicate this date when releasing ODM 2.0. After\nthose 6 months, we will either drop support for ODM 1.3 or extend it for another\n3 months, depending on the adoption rate of ODM 2.0. We are aware that the\nnumber and kind of BC breaks for 2.0 pose a significant challenge for many\nusers, which is why we don\u2019t want to force people to rush into this update.\n\nDuring the support phase for MongoDB ODM 1.3, we will also continue to provide\nbug fixes to the MongoDB Abstraction Layer that is used by MongoDB ODM 1.x. This\nproject will reach end-of-life at the same time as MongoDB ODM 1.3, and will no\nlonger be supported beyond that. We encourage users that depend on this library\nto switch to using the MongoDB PHP Library, which is part of the official\nMongoDB driver for PHP.\n\nContributing to MongoDB ODM\n===========================\n\nWe are currently looking for contributors. This doesn\u2019t necessarily mean\nimplementing new features or merging pull requests. Reporting or triaging\nissues, requesting features, and reporting bugs are all extremely important and\nhelps us deliver better software!\n\nGetting help\n============\n\nThe documentation can be found on the website:\nhttps://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/index.html.\nTo get support, contact us via the #mongodb-odm channel within the Doctrine\nSlack. If you believe you have found a bug, please file a bug report on GitHub.\n", + "date": "2019-09-30 00:00:00" }, { - "url": "/2009/06/30/doctrine-orm-for-php-available-in-print.html", - "slug": "doctrine-orm-for-php-available-in-print", - "title": "Doctrine ORM for PHP available in print", - "authorName": "jwage", + "url": "/2015/03/25/common-2-5-0-beta-1.html", + "slug": "common-2-5-0-beta-1", + "title": "Doctrine Common 2.5.0-beta1 Pre-Release", + "authorName": "", "authorEmail": "", - "contents": "Last night the [Doctrine ORM for\nPHP](https://www.amazon.com/Doctrine-ORM-PHP-Jonathan-Wage/dp/2918390038/ref=sr_1_1?ie=UTF8&s=books&qid=1246303098&sr=8-1)\nbook became available on the Amazon website. This is our first official\npiece of published documentation and we are very excited and proud to\nsee this.\n\nIf you are an existing or new Doctrine user, it is much appreciated if\nyou purchase a copy. Since Doctrine is an open source project we don't\nmake any money directly from it. Doctrine is all possible because of the\ncontributors and the companies that fund it, like [Sensio\nLabs](https://sensiolabs.com). So it is a very nice gesture, even if\nyou are already a Doctrine expert, to purchase a copy of the book to\nshow your appreciation and support for the project.\n", - "date": "2009-06-30 00:00:00" + "contents": "We are happy to announce the immediate availability Doctrine Common\n\\`2.5.0-beta1\\`.\n\nThis is a pre-release meant to allow users and contributors to try out\nthe new upcoming features of the Common package.\n\nWe encourage all of our users to help us by trying out this beta\nrelease. Please report any possible problems or incompatibilities that\nmay have been introduced during development.\n\nStarting from this release, no more new features or breaking changes\nwill be allowed in the\n\nRelease RoadMap\n===============\n\nWe expect to release following versions of the Common package in the\nnext days:\n\n> - `2.5.0` on `2015-04-02`\n\nPlease note that these dates may change depending on the availability of\nour team.\n\n\\#\\# Installation\n\nYou can install this version of the Common package by using Composer and\nthe following `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/common\": \"2.5.0-beta2\"\n },\n \"minimum-stability\": \"dev\"\n}\n```\n\nChanges since 2.4.x\n===================\n\nThis is a list of issues solved in `2.5.0-beta1` since `2.4.x`:\n\nBug\n---\n\n- [[DCOM-129](https://github.com/doctrine/common/issues/428)] -\n Annotation parser matches colon after annotation\n- [[DCOM-151](https://github.com/doctrine/common/issues/452)] -\n [[GH-233](https://github.com/doctrine/common/pull/233)] [DocParser]\n Fix trying include classes if its must be ignored.\n- [[DCOM-162](https://github.com/doctrine/common/issues/463)] -\n [[GH-244](https://github.com/doctrine/common/pull/244)] return\n parameter for debug method\n- [[DCOM-168](https://github.com/doctrine/common/issues/469)] -\n ignoredAnnotationNames doesn't work in Annotation loop\n- [[DCOM-175](https://github.com/doctrine/common/issues/477)] -\n Proxies return private properties in \\_\\_sleep, which is not\n supported by PHP.\n- [[DCOM-191](https://github.com/doctrine/common/issues/493)] -\n Wrong inflection for \"identity\"\n- [[DCOM-212](https://github.com/doctrine/common/issues/518)] -\n [[GH-296](https://github.com/doctrine/common/pull/296)] Proxies\n shouldn't serialize static properties in \\_\\_sleep()\n- [[DCOM-216](https://github.com/doctrine/common/issues/522)] -\n [[GH-298](https://github.com/doctrine/common/pull/298)] Silence\n E\\_NOTICE warning: \"Undefined index\".\n- [[DCOM-220](https://github.com/doctrine/common/issues/527)] -\n [[GH-304](https://github.com/doctrine/common/pull/304)] fix typo\n- [[DCOM-223](https://github.com/doctrine/common/issues/530)] -\n [[GH-308](https://github.com/doctrine/common/pull/308)] fix the\n optimize regex and adapt the tests to actually test classAnnotat...\n- [[DCOM-228](https://github.com/doctrine/common/issues/535)] -\n [[GH-312](https://github.com/doctrine/common/pull/312)] Improve\n UnexpectedValueException error message\n- [[DCOM-261](https://github.com/doctrine/common/issues/571)] -\n [[GH-344](https://github.com/doctrine/common/pull/344)] Fix fatal\n error when classexist tries to call the protected loader\n- [[DCOM-270](https://github.com/doctrine/common/issues/581)] -\n [[GH-351](https://github.com/doctrine/common/pull/351)] Added\n validation where allowed QCNs with \":\" NS separator\n- [[DCOM-272](https://github.com/doctrine/common/issues/583)] -\n Proxy generator doesn't understand splat operator (PHP 5.6 argument\n unpacking)\n\nDocumentation\n-------------\n\n- [[DCOM-237](https://github.com/doctrine/common/issues/545)] -\n [[GH-318](https://github.com/doctrine/common/pull/318)] Fixed link\n to Documentation\n- [[DCOM-280](https://github.com/doctrine/common/issues/592)] -\n [[GH-359](https://github.com/doctrine/common/pull/359)] Fixed\n missing / incorrect docblocks\n\nImprovement\n-----------\n\n- [[DCOM-246](https://github.com/doctrine/common/issues/554)] -\n [[GH-328](https://github.com/doctrine/common/pull/328)] Optimized\n imports\n- [[DCOM-247](https://github.com/doctrine/common/issues/555)] -\n [[GH-329](https://github.com/doctrine/common/pull/329)] Remove dead\n config\n- [[DCOM-263](https://github.com/doctrine/common/issues/573)] -\n [[GH-347](https://github.com/doctrine/common/pull/347)] Class\n loader: skip non-existing files and files not containing the\n requested class\n- [[DCOM-278](https://github.com/doctrine/common/issues/589)] -\n [[GH-358](https://github.com/doctrine/common/pull/358)] travis: PHP\n 7.0 nightly added, allowed failure\n\nNew Feature\n-----------\n\n- [[DCOM-257](https://github.com/doctrine/common/issues/566)] -\n [[GH-342](https://github.com/doctrine/common/pull/342)] Class\n metadata loading fallback hook in AbstractClassMetadataFactory\n- [[DCOM-277](https://github.com/doctrine/common/issues/588)] -\n [[GH-357](https://github.com/doctrine/common/pull/357)] Custom\n namespace separators for SymfonyFileLocator\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DDC).\n", + "date": "2015-03-25 00:00:00" }, { - "url": "/2007/10/14/new-coverage-report.html", - "slug": "new-coverage-report", - "title": "New Coverage Report", - "authorName": "jwage", + "url": "/2010/06/15/doctrine2-beta2-released.html", + "slug": "doctrine2-beta2-released", + "title": "Doctrine2 BETA2 Released", + "authorName": "beberlei", "authorEmail": "", - "contents": "\n\nThe Doctrine development team are pleased to announce the release of a\ncoverage report system. Special things to meus and romanb for thier work\nin this area.\n\n
\n\n\n\nThe report can be seen at\n[http://doctrine.pengus.net/doctrine/trunk/tests/coverage/index.php](http://doctrine.pengus.net/doctrine/trunk/tests/coverage/index.php).\nThis new report will help to ensure that the Doctrine code is well\ntested, ensuring that the upcomming doctrine version 1 release is well\ntested and stable.\n\n
\n\n\n", - "date": "2007-10-14 00:00:00" + "contents": "Today we are happy to announce the immediate availability of the second\nbeta version of Doctrine2. This is the first release after the\n[split](https://www.doctrine-project.org/2010/05/27/bringing-it-all-together.html)\nof Doctrine2 into three independent projects, Common, DBAL and ORM. This\nchange took longer than we expected but we are back to our SVN\nproductivity now and strive to surpass it utilizing Git.\n\nBeta 2 is a completely backwards compatible release and over 60 issues\nand bugs have been closed in total. The following larger changes have\nbeen introduced from Doctrine2 Beta 1:\n\nCommon\n======\n\n- Added ClassLoader\\#classExists as well as\n ClassLoader\\#getClassLoader methods\n [DCOM-7](https://github.com/doctrine/common/issues/669)\n- Changes to Annotation Parser with regards to Autoloading Annotation\n Classes\n\nDBAL\n====\n\n- New Driver support for Microsoft PDO Sqlsrv Extension\n [DBAL-10](https://github.com/doctrine/dbal/issues/927)\n- Fixed Mssql/Sqlsrv Platforms and SchemaManager\n [DBAL-8](https://github.com/doctrine/dbal/issues/2031)\n- New Driver and Platform Support for DB2 (PDO\\_DB2 and IBM\\_DB2\n Extensions)\n [DDC-494](https://github.com/doctrine/orm/issues/4999)\n\nORM\n===\n\n- Basic Pessimistic Locking support using FOR UPDATE or vendor\n specific shared locks\n [DDC-178](https://github.com/doctrine/orm/issues/2432)\n- Added a Validate Mapping CLI Task\n [DDC-515](https://github.com/doctrine/orm/issues/5023)\n\nDownload\n--------\n\nYou can get the code a few different ways which are described in detail\n[here](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA2).\nIf you have any issues with Doctrine you can report them on\n[Jira](https://www.doctrine-project.org/jira).\n\nContributions\n-------------\n\nWe thank all the contributors and early adopters for their extensive\nfeedback and reports. If you are interesting in contributing to the\nDoctrine project too, check out our new [contributors\nguide](https://www.doctrine-project.org/contribute) and\n[community](https://www.doctrine-project.org/community) page for\ninformation about how you can get involved!\n", + "date": "2010-06-15 00:00:00" }, { - "url": "/2009/01/12/doctrine-1-1-is-right-around-the-corner.html", - "slug": "doctrine-1-1-is-right-around-the-corner", - "title": "Doctrine 1.1 is right around the corner", - "authorName": "jwage", - "authorEmail": "", - "contents": "1.1 Release Manager\n===================\n\nFirst, I would like to introduce **Guilherme Blanco** as the release\nmanager of **Doctrine 1.1**. This means he will be responsible for\norganizing the tickets and managing the releases for the 1.1 branch from\nnow on. So, if you have any issues you can yell at him :)\n\n1.1 Release Candidate\n=====================\n\nAnother great thing today is that we have made available the first\nrelease candidate of the 1.1 branch. We were originally planning on\nhaving a third beta but as the amount of tickets that came in was\npractically none, we decided to move on to the release candidate stage.\n\nAs always, you can [download\nhere](https://www.doctrine-project.org/download) and check out the\n[change log](https://www.doctrine-project.org/change_log/1_1_0_RC1) and\nthe [upgrade](https://www.doctrine-project.org/upgrade/1_1) document to\nfind out what has changed in 1.1.\n", - "date": "2009-01-12 00:00:00" + "url": "/2015/12/15/doctrine-mongodb-odm-release-1.0.4.html", + "slug": "doctrine-mongodb-odm-release-1.0.4", + "title": "Doctrine MongoDB ODM release 1.0.4", + "authorName": "Andreas Braun", + "authorEmail": "alcaeus@alcaeus.org", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.0.4](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.4).\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#104-2015-12-15).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.4\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.4).\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0.4\"\n }\n}\n```\n\nDoctrine MongoDB ODM 1.1 requires PHP 5.5+\n==========================================\n\nThe current `master` branch saw its PHP requirement bumped to 5.5\nrecently. If you are still using the master version in your project you\nshould switch to a stable release as soon as possible:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0\"\n }\n}\n```\n\nThis will ensure you are using stable versions and will use 1.1 as soon\nas it's released.\n\nThe upcoming releases of Doctrine MongoDB (1.3) and ODM (1.1) will also\ndrop support for all MongoDB driver versions before 1.5. If you are\nstill using an older driver, please consider upgrading it in order to\nreceive future updates.\n", + "date": "2015-12-15 00:00:00" }, { - "url": "/2009/10/21/doctrine-1-2-alpha3-released.html", - "slug": "doctrine-1-2-alpha3-released", - "title": "Doctrine 1.2 ALPHA3 Released", + "url": "/2010/03/21/doctrine-2-give-me-my-constructor-back.html", + "slug": "doctrine-2-give-me-my-constructor-back", + "title": "Doctrine 2: Give me my constructor back", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am happy to bring you hopefully the last alpha release for\nDoctrine 1.2. We decided to have one more alpha due to some interesting\nissues and improvements brought to our attention related to PEAR\nmodel/file naming standards, result set caching improvements and a few\nother things. You can of course check out what all is new in Doctrine in\nthe [upgrade](https://www.doctrine-project.org/upgrade/1_2) file. Below\nare some quick links to some of the most recent changes.\n\n- [PEAR Style Model Loading and\n Generation](https://www.doctrine-project.org/upgrade/1_2#PEAR%20Style%20Model%20Loading%20and%20Generation)\n- [Ordering\n Relationships](https://www.doctrine-project.org/upgrade/1_2#Ordering%20Relationships)\n- [Result Cache\n Improvements](https://www.doctrine-project.org/upgrade/1_2#Result%20Cache%20Improvements)\n\nGo ahead and [download](https://www.doctrine-project.org/download)\nDoctrine 1.2 ALPHA3 and give it a try. Let us know if you have any\nissues by raising a new issue in\n[JIRA](https://www.doctrine-project.org/jira).\n", - "date": "2009-10-21 00:00:00" - }, - { - "url": "/2008/01/16/cleaning_up_the_mess.html", - "slug": "cleaning_up_the_mess", - "title": "Cleaning up the mess", - "authorName": "guilhermeblanco", - "authorEmail": "", - "contents": "Starting from last blog post, development team went under some general\ndiscussions to reach a commom sense regarding the project versions. We\nare finally organizing our project from a non-versioned stage to a\nversionable stage, which was causing a lot troubles to everyone.\nCurrently we are under heavy development to reach a stable version of\n1.0 release. Until here, we are under some internal refactorings and we\ndecided to create a branch which we named 1.0beta2. Since then, we got a\nfeature freeze version and without big refactorings. The trunk went\nunder big changes and we decided to not keep the 1.0beta2 as the branch\nname; we renamed it 0.10. We know it is a big impact for those that\nchecked-out the branch, but we think it is safer to do it now instead of\nhave to deal with versions confusion in a near future. It's the best\norganization we can reach and it's the last one (thanks God!). Now that\nwe have the branches 0.9 and 0.10, it is time to define minor versions.\nWe caught from our history what was the first release of 0.9 and we\ntagged it as 0.9.0. We also got the old 1.0beta2 release and tagged it\nas 0.10-beta2. So currently we have 2 commit-free tagged versions and 2\nbranches with feature freeze. We highly discourage users from using\ntrunk, since it is a very unstable environment and your code may not\nwork. Please update your repository locations. These are the changes we\ndid: tags/1.0beta1 =\\> tags/0.9.0 tags/1.0beta2 =\\> tags/0.10-beta2\nbranches/1.0beta2 =\\> branches/0.10 branches/0.9 =\\> no change We also\nschedule new tagged releases in a near future. The next releases will be\n0.9.1 and 0.10-rc1. You can join \\#doctrine channel (at\nirc.freenode.net) or group list to follow discussions regarding this\nsubject. We apologize the mess we caused to users until now and we hope\nto not have this problem again, specially because we didn't have much\nrelease management knowledge. Thanks.\n", - "date": "2008-01-16 00:00:00" + "contents": "At [ConFoo\n2010](https://www.doctrine-project.org/2010/03/15/doctrine-2-at-confoo-2010.html)\nduring my presentation, someone asked about the constructor of entities\nin Doctrine 2 and whether or not it could be used. I think this is\nsomething worth writing about since in Doctrine 1 this was not possible.\nThe constructor was hi-jacked from you and used internally by Doctrine.\n\nIn Doctrine 2 it is possible to define the constructor in your entity\nclasses and is not required to be a zero argument constructor! That's\nright, Doctrine 2 never instantiates the constructor of your entities so\nyou have complete control!\n\nThis is possible due to a small trick which is used by two other\nprojects,\n[php-object-freezer](http://sebastian-bergmann.de/archives/831-Freezing-and-Thawing-PHP-Objects.html)\nand Flow3. The gist of it is we store a prototype class instance that is\nunserialized from a hand crafted serialized string where the class name\nis concatenated into the string. The result when we unserialize the\nstring is an instance of the class which is stored as a prototype and\ncloned everytime we need a new instance during hydration.\n\nHave a look at the method responsible for this:\n\n~~~~ {.sourceCode .php}\n_prototype === null) {\n $this->_prototype = unserialize(sprintf('O:%d:\"%s\":0:{}', strlen($this->name), $this->name));\n }\n return clone $this->_prototype;\n}\n~~~~\n\nThe above code allows us to have entities where we make full use of our\nconstructor like the following class definition:\n\n~~~~ {.sourceCode .php}\nusername = $username;\n $this->password = md5($password);\n }\n}\n~~~~\n\nNow of course you can use the constructor like you would expect:\n\n~~~~ {.sourceCode .php}\n \\ DoctrineORMEntityManager;\n>\n> /*\\** @Entity\n> : \\*\\*/\n>\n> class User extends PersistentObject { /*\\* @Id @Column(type=\"integer\")\n> @GeneratedValue*\\*/ protected \\$id;\n>\n> > /*\\* @Column(type=\"string\")*\\*/ protected \\$name;\n> >\n> > /*\\* @OneToMany(targetEntity=\"Phonenumber\", mappedBy=\"user\")*\\*/\n> > protected \\$phonenumbers;\n>\n> }\n\nExtending from \\`PersistentObject\\` will make getters/setters available\nfor your entities. Bi-directional associations are handled\nautomatically.\n\n~~~~ {.sourceCode .php}\nsetNumber(123454);\n$user = new User();\n$user->setName(\"Benjamin\");\n$user->addPhonenumbers($number);\n\necho $user->getName();\nforeach ($user->getPhonenumbers() AS $number) {\n echo $number->getNumber();\n}\n~~~~\n\nFuture Developments\n===================\n\nFirst important notice: We will not develop the \\`PersistentObject\\`\ninto a full-fledged active record. Doctrine focuses on being a\nDataMapper. We do however provide a bunch of new hooks in version 2.2\nthat will allow you to turn Doctrine 2 into an active record very\neasily:\n\n- Inject EntityManager and ClassMetadata\n\nIf your entity implements \\`DoctrineCommonPersistentObjectManagerAware\\`\nthen the ObjectManager and ClassMetadata of the entity will be injected\nduring construction.\n\n- EntityManager\\#flush() can now flush one entity only\n\nWhen you pass a single entity to EntityManager\\#flush() this entity will\nbe the only one flushed into the database. Cascade persist rules are\napplied to this object. With this feature and access to the\nEntityManager inside your entities you can now start implementing an\nefficient Active Record with \"Record\\#save()\" and \"Record\\#delete()\"\nmethods.\n\n- PHP 5.4 and Traits\n\nThe next version of PHP is already in Beta 2 and will probably be\nreleased in the next months. One of the most powerful feature of this\nrelease will be Traits, something very suitable for Doctrine and ORMs in\ngeneral.\n\nNo worries: Doctrine 2 will always be supporting 5.3, however we will\nprobably ship with optional features that are using the trait\nfunctionality. High on the list:\n\n- Porting \\`PersistentObject\\` to a trait\n- Serialization of entities from a trait (ToArray(), ToJson()).\n Available as a service to PHP 5.3\n- ActiveEntity trait that extends the \\`PersistentObject\\` one.\n\nBased on this feature set it should even be possible to add behaviors to\nDoctrine 2, although we won't focus on implementing behaviors in the\ncore team.\n\nLast words\n==========\n\nI would really appreciate people starting to test the\n\\`PersistentObject\\` if they like too and give us feedback.\n", + "date": "2011-11-21 00:00:00" }, { - "url": "/2008/08/27/release-candidate-2-available.html", - "slug": "release-candidate-2-available", - "title": "Release Candidate 2 Available", - "authorName": "jwage", + "url": "/2010/03/17/doctrine-performance-revisited.html", + "slug": "doctrine-performance-revisited", + "title": "Doctrine Performance Revisited", + "authorName": "beberlei", "authorEmail": "", - "contents": "\n\nOnly two days after making available the first release candidate we have\nprepared the second release candidate and made it available for\ndownload. This release contains dozens and dozens of bug fixes as well\nas a few new minor features required to fill some holes/gaps in the 1.0\nAPI before releasing. Below are some highlights of this release.\n\n
\n\nWe will have one more release candidate on either Friday or Saturday of\nthis week and Doctrine 1.0 Stable will be released Monday September 1st\n2008. If you haven't given the 1.0 branch a try yet, please do so and\nreport any issues to us so that we can get them fixed before Monday.\nThanks!\n\n
\n\n\n", - "date": "2008-08-27 00:00:00" + "contents": "In our ever-lasting quest to provide a powerful, flexible and yet\nperformant ORM experience we are often confronted with benchmarks and\nhave been talking about performance topics since last year in several\ntalks at many different conferences, and Roman has [talked about his\nopinion on such benchmarks on this\nblog](https://www.doctrine-project.org/2009/11/18/php-benchmarking-mythbusters.html).\n\nRecently Francois Zaninotto, lead developer of the soon to be released\nPropel 1.5 (currently in beta) [wrote a blog\npost](http://propel.posterous.com/how-fast-is-propel-15) comparing\nperformance mainly of the different Propel 1.x versions with and without\ncaching and against a PDO benchmark. The benchmark also contains a test\nfor Doctrine 1.2.\n\nIt is important to note that the PDO test only shows the \"baseline\"\nperformance, that is, it does not even remotely \"do the same thing\" as\nthe others. No object creation, no hydration of objects from result\nrows, no identity management, no change tracking, nothing. So dont get\nthe numbers wrong. If you would want to get at least remotely the same\nresult as the ORMs provide with a raw PDO/SQL \"benchmark\", you would\nneed quite some custom coding and, if you dont want to copy/paste all\nday, introduce some abstraction.\n\nThe following scenarios are compared in the benchmark:\n\n> - Scenario 1: Create a new Model object, set its columns, and save\n> it. Tests Model object speed, and INSERT SQL generation.\n> - Scenario 2: Lookup a record by its primary key. Tests basic query\n> and hydration.\n> - Scenario 3: Lookup a record using a complex query. Tests object\n> query speed.\n> - Scenario 4: Lookup 5 records on a simple criterion. Tests\n> hydration speed.\n> - Scenario 5: Lookup a record and hydrate it together with its\n> related record in another table. Tests join hydration speed.\n\nI reproduced the complete table of results here for comparison since my\nmachine is generating very different overall times than the ones\ngenerated by Francois. Each Scenario is executed several times and the\nsum of execution times is printed. After each run the identity maps are\nwiped so that objects are not reused. All the tests use an SQLite\nIn-Memory database, are run on PHP 5.3 and *of course* use an opcode\ncache (APC).\n\nA first version of the corresponding Doctrine 2 benchmarks was added\ntoday [to the SVN repository by\nRoman](http://code.google.com/p/php-orm-benchmark/source/browse/#svn/trunk/doctrine_2)\nThey can all be run from your machine directly after checkout.\n\nHere are my results:\n\n | Insert | findPk | complex| hydrate| with |\n |--------|--------|--------|--------|--------|\n\n> PDOTestSuite | 132 | 149 | 112 | 107 | 109 |\n\n> Propel14TestSuite | 953 | 436 | 133 | 270 | 280 |\n\n> Propel15aLa14TestSuite | 926 | 428 | 143 | 264 | 282 |\n> : Propel15TestSuite | 923 | 558 | 171 | 356 | 385 |\n>\n> Propel15WithCacheTestSuite | 932 | 463 | 189 | 342 | 327 |\n> : Doctrine12TestSuite | 1673 | 2661 | 449 | 1710 | 1832 |\n>\n> Doctrine12WithCacheTestSuite | 1903 | 1179 | 550 | 957 | 722 |\n> : Doctrine2TestSuite | 165 | 426 | 412 | 1048 | 1042 |\n>\n> > Doctrine2WithCacheTestSuite | 176 | 423 | 148 | 606 | 383 |\n\nThese are the key observations for the Doctrine 2 results.\n\nDoctrine 2 Insert Performance\n=============================\n\nThis is mainly a result of the rather strange test. Its basically a\nmass-insert. All the insert tests seem to use a single database\ntransaction, so its comparable to a mass-insert on a single request. As\nsuch the result is not surprising since we know that Doctrine 2 can\neffectively batch inserts. Mind you that mass-inserts are not really a\nfocus of an ORM and not a realistic scenario in most applications. So\ntake this test with a grain of salt, its a mass-insert test. If you're\nlooking for the ORM with the fastest mass-inserts, you can stop now, you\nfound it.\n\nDoctrine 2 Find By Primary Key Performance\n==========================================\n\nDoctrine 2 Find Entity By Primary Key performance seems to be roughly\nthree times as slow as handcrafted PDO (that doesnt do anything besides\nexecuting the query, mind you...). The good results in this test,\nespecially compared to Doctrine 1, come from the fact that there is not\nmuch abstraction for all kinds of find\\*() operations going on. SQL is\ncreated, executed and the results turned into objects without much\nhoopla.\n\nDoctrine 2 Complex Query Performance\n====================================\n\nThe complex query is a scalar count query. See the Doctrine 2 code for\nthis scenario:\n\n~~~~ {.sourceCode .php}\nem->createQuery(\n 'SELECT count(a.id) AS num FROM Author a WHERE a.id > ?1 OR CONCAT(a.firstName, a.lastName) = ?2'\n)->setParameter(1, $this->authors[array_rand($this->authors)]->id)\n ->setParameter(2, 'John Doe')\n ->getSingleScalarResult();\n~~~~\n\nThe getSingleScalarResult() method that executes the query uses a very\nminimalistic hydration mode that only grabs the first value of the first\nresult column. Therefore in combination with the DQL to SQL Query Parser\nCache (Doctrine2WithCacheTestSuite) we get a result almost as fast\nresult as the PDO handcrafted scenario, because we essentially get the\ntransformed SQL query from the cache for this DQL, execute it and grab\nthe value.\n\nHydration Performance (Scenario 4 and 5)\n========================================\n\nIn the field of hydration Doctrine 2 is either equally fast or seems\n\"only\" up to 40% slower than Propel 1.4 or Propel 1.5 based on the two\nscenarios. The main reason here is really only that since Doctrine 2\nprovides transparent persistence, it can not give lazy-loading through\nbase classes, instead it needs to inject proxy objects as stubs into the\nentities. That simply means Doctrine needs to create more objects than\npropel, thats it. Note that once the objects would actually be\nlazy-loaded, Propel would need to create these objects, too. The\ndifference is that Doctrine needs to create them beforehand. When they\nlazy-load, no new object is created, the proxies simply populate\nthemselves with the data.\n\nA main difference, however, is that the hydration code of Doctrine is\ncompletely generic. That means this same code can handle all kinds of\ndifferent SQL results correctly, no matter how many nested joins, scalar\nvalues, aggregate values there are in the result and it can even deal\nwith strangely ordered collections in result sets (You get such stuff\nwith multiple order by clauses on different fields which order in\ndifferent directions. Combine such ordering with joining collections and\nyou get a pretty funky SQL result set).\n\nThe general approach in algorithms from the Doctrine 1.2 Hydrators were\nre-used in Doctrine 2. However, optimizations in the data structures and\nuse of the fastest internal php methods (as fast as you can get with\nphp, you know ;)) made it possible to optimize the code to yield the\nshown results.\n\nInteresting here is maybe that Doctrine 2 without caching is all in all\nstill a lot faster than Doctrine 1 with caching, so this looks like a\ngood improvement. Furthermore, the query cache in Doctrine 2 is very\neffective and almost completely removes all the overhead of DQL. The\nquery cache is what allows us to provide this extremely powerful\nabstraction that is immensely flexible. If you dont like DQL yet, you\nshould read up on domain-specific languages and object query languages\nin particular. It's a gem and cornerstone of this project and if you\ndont like it we can't help you.\n\nHydration with non Object Results\n=================================\n\nPutting aside the boring Propel comparisons, lets get to something\nDoctrine-specific. Because we know that read performance is very\nimportant and object instances are not necessary all the time, Doctrine\n2, just like Doctrine 1, provides many different levels of abstraction\nin-between objects and raw PDO/SQL result sets that you can go up and\ndown as you wish.\n\nThe main two intermediate levels are array graphs and flat, scalar\nresult sets (which are still not the same as the raw SQL result sets\nbecause type conversions and column name to field name conversions still\ntake place).\n\nThese alternative result formats perform as follows:\n\n | Insert | findPk | complex| hydrate| with |\n |--------|--------|--------|--------|--------|\n\n> Dc2ArrayHydrateTestSuite | 172 | 421 | 145 | 332 | 285 |\n> Dc2ScalarHydrateTestSuite | 175 | 424 | 145 | 251 | 245 |\n> Dc2WithoutProxiesTestSuite | 174 | 423 | 148 | 483 | 628 |\n\nThe first method \"Without Proxies\" still creates object instances,\nhowever, it does not replace loose ends of the object graph with\nlazy-load proxies. Be careful with such optimizations in practice\nbecause partial objects can be fragile to work with. The important point\nhere is that different levels of optimization are there when needed,\nbefore you need to finally drop all abstraction and deal with PDO/SQL\ndirectly (which is not bad, you know, just often not very convenient,\nflexible and/or robust against refactorings or schema changes).\n\nThe Array Hydration (getArrayResult()) returns a nested array structure\nthat is comparable to an object graph. Most of the time you can think of\nit as a performant read-only \"view\" of an object graph. In the case of\nBooks with Authors the result looks like:\n\n array(1) {\n [0]=>\n &array(5) {\n [\"id\"]=>\n int(1)\n [\"title\"]=>\n string(6) \"Hello0\"\n [\"isbn\"]=>\n string(4) \"1234\"\n [\"price\"]=>\n float(0)\n [\"author\"]=>\n &array(4) {\n [\"id\"]=>\n int(1143)\n [\"firstName\"]=>\n string(8) \"John1142\"\n [\"lastName\"]=>\n string(7) \"Doe1142\"\n [\"email\"]=>\n NULL\n }\n }\n\nThese array graphs can be built from basically any query. Its backed by\nroughly the same algorithm that allows the arbitrary object hydration\nwith indefinite joins and even scalar and aggregate values in between.\n\nIn the case where your objects implement ArrayAccess, you can often use\nobject and array results interchangeably without the need to update view\ncode.\n\nConclusion\n==========\n\nWhat that all means is mainly that if you have an application that looks\n(almost) exactly like the benchmarking code used here, then you (maybe)\ngot some useful numbers to look at, otherwise ... not.\n\nApart from that we hope this convinces you that we're not wasting your\nCPU cycles on purpose. Doctrine 2 is a huge balancing act between\nflexibility, features and performance and it worked out well so far.\n", + "date": "2010-03-17 00:00:00" }, { - "url": "/2015/03/18/orm-2-5-0-beta-1.html", - "slug": "orm-2-5-0-beta-1", - "title": "Doctrine ORM 2.5.0 BETA 1 Released", - "authorName": "Benjamin Eberlei, Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability Doctrine ORM\n`2.5.0-beta1`.\n\nDue to day-job related responsibilities, we are a month behind our\nschedule. Please bear with us as we prepare this new release.\n\nThis is a pre-release meant to allow users and contributors to try out\nthe new upcoming features of the ORM.\n\nWe encourage all of our users to help us by trying out this beta\nrelease. Please report any possible problems or incompatibilities that\nmay have been introduced during development.\n\nStarting from this release, no more new features or breaking changes\nwill be allowed into the repository until \\`2.6.x\\` development starts.\n\nWhat is new in 2.5.x?\n=====================\n\nWe are currently in the process of documenting all the changes and new\nfeatures that were introduced in Doctrine ORM 2.5.x.\n\nYou can find the current state of the 2.5.0 changes overview in [the\nupgrade\nnotes](http://docs.doctrine-project.org/en/latest/changelog/migration_2_5.html).\n\nRelease RoadMap\n===============\n\nWe expect to release following versions of the ORM in the next days:\n\n> - `2.5.0-RC1` on `2015-03-25`\n> - `2.5.0` on `2015-04-02`\n\nPlease note that these dates may change depending on the availability of\nour team.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"2.5.0-beta1\"\n },\n \"minimum-stability\": \"dev\"\n}\n```\n\nChanges since 2.5.0-alpha2\n==========================\n\nThis is a list of issues solved in `2.5.0-beta1` since `2.5.0-alpha2`:\n\n- [[DDC-3452](https://github.com/doctrine/orm/issues/4261)]\n Embeddables Support for ClassMetadataBuilder\n- [[DDC-3551](https://github.com/doctrine/orm/issues/4369)]\n Load platform lazily in ClassMetadataFactory to avoid database\n connections.\n- [[DDC-3258](https://github.com/doctrine/orm/issues/4047)]\n Improve suport for composite primary keys and associations as keys.\n- [[DDC-3554](https://github.com/doctrine/orm/issues/4372)]\n Allow to recreate DQL QueryBuilder from parts.\n- [[DDC-3461](https://github.com/doctrine/orm/issues/4271)]\n Allow setting association as primary key in ClassMetadataBuilder API\n with `makePrimaryKey()`.\n- [[DDC-3587](https://github.com/doctrine/orm/issues/4408)]\n Added programmatical support to define indexBy on root aliases.\n- [[DDC-3588](https://github.com/doctrine/orm/issues/4409)]\n Add support for seconds in `DATE_ADD` DQL function.\n- [[DDC-3585](https://github.com/doctrine/orm/issues/4406)]\n Fix instantiation of nested embeddables.\n- [[DDC-3607](https://github.com/doctrine/orm/issues/4431)]\n Add support for orphan removal in\n ClassMetadataBuilder/AssocationBuilder\n- [[DDC-3597](https://github.com/doctrine/orm/issues/4419)]\n Add support for embeddables in MappedSuperclasses.\n- [[DDC-3616](https://github.com/doctrine/orm/issues/4441)]\n Add support for DateTimeImmutable in Query parameter detection.\n- [[DDC-3622](https://github.com/doctrine/orm/issues/4448)]\n Improve support for objects as primary key by casting to string in\n UnitOfWork.\n- [[DDC-3619](https://github.com/doctrine/orm/issues/4444)]\n Update IdentityMap when entity gets managed again fixing\n `spl_object_hash` collision.\n- [[DDC-3608](https://github.com/doctrine/orm/issues/4432)]\n Fix bug in EntityGenerator to XML/YML with default values.\n- [[DDC-3590](https://github.com/doctrine/orm/issues/4412)]\n Fix bug in PostgreSQL with naming strategy of non-default schema\n tables.\n- [[DDC-3566](https://github.com/doctrine/orm/issues/4385)]\n Fix bug in Second-Level Cache with association identifiers.\n- [[DDC-3528](https://github.com/doctrine/orm/issues/4343)]\n Have `PersistentCollection` implement `AbstractLazyCollection` from\n [doctrine/collections](https://github.com/doctrine/collections).\n- [[DDC-3567](https://github.com/doctrine/orm/issues/4386)]\n Allow access to all aliases for a QueryBuilder.\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DDC).\n", - "date": "2015-03-18 00:00:00" + "url": "/2021/12/04/mongodb-odm-2.3.html", + "slug": "mongodb-odm-2.3", + "title": "New Release: Doctrine MongoDB ODM 2.3 with Attributes, JSON Schema Validation, and more", + "authorName": "Ion Bazan", + "authorEmail": "ion.bazan@gmail.com", + "contents": "We have released a new minor version 2.3 of Doctrine MongoDB ODM, the first version\nwith support for using PHP 8 Attributes as a new driver for mapping documents\nand several other changes. [See all changes and contributors in the\nChangelog](https://github.com/doctrine/mongodb-odm/releases/tag/2.3.0) on GitHub.\n\n## Attributes Mapping Driver\n\nThe following code example shows many of the mappings that are re-using\nthe annotation classes for familiarity:\n\n```php\nuse Doctrine\\ODM\\MongoDB\\Mapping\\Annotations as MongoDB;\nuse Doctrine\\ODM\\MongoDB\\Types\\Type;\n\n#[MongoDB\\Document(repositoryClass: PostRepository::class)]\nclass Post\n{\n #[MongoDB\\Id]\n private string $id;\n\n #[MongoDB\\Field(type: Type::BOOLEAN)]\n private bool $published = false;\n\n #[MongoDB\\Field(type: Types::COLLECTION)]\n private array $text = [];\n\n #[MongoDB\\ReferenceOne(targetDocument: User::class)]\n public $author;\n\n #[MongoDB\\ReferenceMany(targetDocument: Tag::class)]\n public Collection $tags;\n}\n```\n\nYou may want to use [Rector](https://getrector.org/) with `DoctrineSetList::DOCTRINE_ODM_23` set\nto convert all your annotation mappings to attributes in seconds!\n\n## JSON Schema Validation\n\nMongoDB \u2265 3.6 offers the capability to validate documents during\ninsertions and updates through a JSON schema associated with the collection. \n[See MongoDB documentation](https://docs.mongodb.com/manual/core/schema-validation/).\n\nDoctrine MongoDB ODM now provides a way to take advantage of this functionality thanks to the new \n[`#[Validation]`](https://www.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/annotations-reference.html#validation) mapping.\n\n```php\nuse Doctrine\\ODM\\MongoDB\\Mapping\\Annotations as MongoDB;\nuse Doctrine\\ODM\\MongoDB\\Mapping\\ClassMetadata;\n\n#[MongoDB\\Document]\n#[MongoDB\\Validation(\n validator: SchemaValidated::VALIDATOR,\n action: ClassMetadata::SCHEMA_VALIDATION_ACTION_WARN\n)]\nclass SchemaValidated\n{\n public const VALIDATOR = <<<'EOT'\n{\n \"$jsonSchema\": {\n \"required\": [\"name\"],\n \"properties\": {\n \"name\": {\n \"bsonType\": \"string\",\n \"description\": \"must be a string and is required\"\n }\n }\n },\n \"$or\": [\n { \"phone\": { \"$type\": \"string\" } },\n { \"email\": { \"$regex\": { \"$regularExpression\" : { \"pattern\": \"@mongodb\\\\.com$\", \"options\": \"\" } } } },\n { \"status\": { \"$in\": [ \"Unknown\", \"Incomplete\" ] } }\n ]\n}\nEOT;\n}\n\n\n```\n\nOnce defined, those options will be added to the collection after running\nthe ``odm:schema:create`` or ``odm:schema:update`` command.\n\n## Psalmified APIs\n\nIn-code documentation has been immensely improved to make sure static analysis tools and IDEs know\nabout the right document classes returned from `DocumentManager`,\n`ClassMetadata`, and other public APIs. This includes generics support\nfor your own repositories extending `DocumentRepository`.\n\n```php\nuse Doctrine\\ODM\\MongoDB\\Repository\\DocumentRepository;\nuse App\\Document\\User;\n\n/**\n * @template-extends DocumentRepository\n\nThe Doctrine development team are pleased to announce the release of a\ncoverage report system. Special things to meus and romanb for thier work\nin this area.\n\n
\n\n\n\nThe report can be seen at\n[http://doctrine.pengus.net/doctrine/trunk/tests/coverage/index.php](http://doctrine.pengus.net/doctrine/trunk/tests/coverage/index.php).\nThis new report will help to ensure that the Doctrine code is well\ntested, ensuring that the upcomming doctrine version 1 release is well\ntested and stable.\n\n
\n\n\n", + "date": "2007-10-14 00:00:00" }, { - "url": "/2015/03/31/orm-2-5-0-rc-2.html", - "slug": "orm-2-5-0-rc-2", - "title": "Doctrine ORM 2.5.0-RC2 Release Candidate", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine ORM\n`2.5.0-RC2`.\n\nThis is a release candidate meant to allow users and contributors to\nverify the stability of the next iteration of the ORM.\n\nWe encourage all of our users to help us by trying out this release.\nPlease report any possible problems or incompatibilities that may have\nbeen introduced during development.\n\nWhat is new in 2.5.x?\n=====================\n\nWe are currently in the process of documenting all the changes and new\nfeatures that were introduced in Doctrine ORM 2.5.x.\n\nYou can find the current state of the 2.5.0 changes overview in [the\nupgrade\nnotes](http://docs.doctrine-project.org/en/latest/changelog/migration_2_5.html).\n\nRelease RoadMap\n===============\n\nWe expect to release following versions of the ORM in the next days:\n\n> - `2.5.0` on `2015-04-02`\n\nPlease note that these dates may change depending on the availability of\nour team.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"2.5.0-RC2\"\n },\n \"minimum-stability\": \"dev\"\n}\n```\n\nChanges since 2.5.0-RC1\n=======================\n\nThis is a list of issues solved in `2.5.0-RC2` since `2.5.0-RC1`:\n\n- [[DDC-3643](https://github.com/doctrine/orm/issues/4471)]\n [[#1352](https://github.com/doctrine/orm/pull/1352)] Fix\n `EntityGenerator` `RegenerateEntityIfExists` logic\n- [[DDC-3645](https://github.com/doctrine/orm/issues/4473)]\n [[\\#1353](https://github.com/doctrine/orm/pull/1353)]\n [[DDC-3637](https://github.com/doctrine/orm/issues/4464)]\n [[\\#1347](https://github.com/doctrine/orm/pull/1347)]\n [[DDC-3642](https://github.com/doctrine/orm/issues/4470)]\n [[\\#1351](https://github.com/doctrine/orm/pull/1351)]\n Paginator logic fixes (complex queries/sorting/db support )\n\n parameters and caches\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DDC).\n", - "date": "2015-03-31 00:00:00" + "url": "/2010/05/13/doctrine-mongodb-object-document-mapper.html", + "slug": "doctrine-mongodb-object-document-mapper", + "title": "Doctrine MongoDB Object Document Mapper", + "authorName": "jwage", + "authorEmail": "", + "contents": "A question asked to me many times by many different people over the last\nyear is, \"will Doctrine ever have any support for MongoDB?\". I have\nnever really had an answer because we haven't had any official plans to\nsupport it as it was so new to the database world and php so nobody\nreally knew much about it yet.\n\nA few weekends ago I decided to install MongoDB and give it a try. It\nwas pretty fun and interesting. I quickly learned that it being a\ndocument based storage system lends itself well to a object mapper so\nthe experimental [Doctrine MongoDB Object Document\nMapper](https://github.com/jwage/odm) was born.\n\nIntroducing Doctrine MongoDB Object Document Mapper (ODM)\n=========================================================\n\nMuch like the Doctrine 2 ORM, the ODM aims to provide transparent\npersistence for PHP 5.3.0+ objects. You will notice that the Doctrine 2\nORM and ODM infrastructure, style, interfaces, etc. are all very\nsimilar. Instead of an EntityManager like in the ORM you have the\nDocumentManager. Map your objects in the same way you do for the ORM.\nHere is an examle `User` document:\n\n~~~~ {.sourceCode .php}\nsetUsername('jwage');\n$user->setPassword('testing');\n\n$dm->persist($user);\n$dm->flush();\n~~~~\n\nNow if you have a look in MongoDB you will see a database named `my_db`\nand a collection named `users` containing a new document like the\nfollowing:\n\n array(\n '_id' => instanceof MongoId,\n 'username' => 'jwage',\n 'password' => 'testing'\n )\n\nWhen you query for and retrieve this document from the database later,\nDoctrine reconstructs the PHP object with the data from MongoDB:\n\n~~~~ {.sourceCode .php}\nfindOne('User', array('username' => 'jwage')); // instanceof User\necho $user->getUsername();\n~~~~\n\nBelow you can find an overview list of the features available:\n\n- Transparent persistence.\n- Map one or many embedded documents.\n- Map one or many referenced documents.\n- Create references between documents in different databases.\n- Map documents with Annotations, XML, YAML or plain old PHP code.\n- Documents can be stored on the\n [MongoGridFS](https://secure.php.net/MongoGridFS).\n- Collection per class(concrete) and single collection inheritance\n supported.\n- Map your Doctrine 2 ORM Entities to the ODM and use mixed data\n stores.\n- Inserts are performed using\n [MongoCollection::batchInsert()](http://us.php.net/manual/en/mongocollection.batchinsert.php)\n- Updates are performed using \\$set instead of saving the entire\n document.\n\nGetting Started?\n================\n\nWe've put together a little documentation to help you get familiar with\nthe ODM quickly.\n\n- [Reference\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/en)\n- [Getting Started Cookbook\n Article](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/cookbook/getting-started/en)\n- [API\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/api)\n\nHow can I contribute?\n=====================\n\nGet your fork on! All you need to do is fork a Doctrine\n[repository](https://github.com/doctrine) on github.com and [submit your\nmodifications](https://github.com/guides/fork-a-project-and-submit-your-modifications/7)\nto us by sending a pull request.\n\nYou can also take part in discussions on our [mailing\nlist](https://groups.google.com/forum/#!forum/doctrine-user) or join \\#doctrine\non irc.freenode.net for live support from the community.\n", + "date": "2010-05-13 00:00:00" }, { - "url": "/2008/04/30/0-11-0-release-candidate-2.html", - "slug": "0-11-0-release-candidate-2", - "title": "0.11.0 Release Candidate 2", + "url": "/2008/08/27/moving-quickly.html", + "slug": "moving-quickly", + "title": "Moving Quickly", "authorName": "jwage", "authorEmail": "", - "contents": "Quick! Come and get it! The second release candidate of the latest\nDoctrine version, 0.11.0, has just been released. This release includes\na few dozen fixed tickets and a few new features required in order to\naddress existing issues/tickets. The complete changelog as always can be\nfound in the CHANGELOG file included with the source or online here.\n", - "date": "2008-04-30 00:00:00" + "contents": "\n\nRight out of the gate we're moving extremely fast. Only two days in to\nworking full-time on the project we've made some significant pushes\nforward. On Monday we made available the first 1.0 Release Candidate and\nthen immediately began working on the second and final release\ncandidate. This milestone is extremely significant as it already\ncontains over 70 closed tickets! It will be released either Wednesday or\nThursday and 1.0 Stable will follow after it on Monday September 1st.\nBelow are some other highlights on the progress made so far.\n\n
\n\nWebsite Updates\n\n
\n\nNew API Documentation Index\n\n
\n\n
\n\nNew Method Summary List\n\n
\n\n
\n\nRC2 Development Highlights\n\n
\n\nI would like to announce the addition of two new hydration modes to the\n1.1 branch that will be included in the 1.1 release.\n\n
\n\nWe feel that they fill an important gap between HYDRATE\\_NONE and\nHYDRATE\\_RECORD/HYDRATE\\_ARRAY.\n\n
\n\nYou can read more about the new hydration modes in the docs. Starting at\n\"Fetching data\". You can also take a look at the new test case.\n\n
\n\nWe encourage everyone to try them out and give us some feedback. Note\nthat this is a feature preview and the implementation and syntax might\nchange (or not) until the final 1.1 release, depending on how many\nissues arise and depending on the feedback.\n\n
\n\n\n", - "date": "2008-10-12 00:00:00" + "contents": "**NOTE** When speaking of \"ORM\" or \"object-relational mapping\" in\n: this post I am referring to the act of mapping an [object-oriented\n domain model](https://martinfowler.com/eaaCatalog/domainModel.html)\n to a relational database. There are other, alternative forms of\n object-relational mapping.\n\n\"Should I use an ORM?\" is a frequently asked question that somehow\nmisses the point, because ORM is usually not some optional thing you can\neither use or not. The choices are elsewhere. Furthermore, if there is a\ndislike for ORM tools it helps to clarify what exactly is the cause. The\ncause can be a dislike of object-oriented domain models. For example, if\nyou prefer to separate data from behavior/logic, as [I've read recently\non Twitter](https://twitter.com/elazar/status/12492601691) , then it is a\nsign that you don't like domain models, at least not rich ones, maybe\n[anemic ones](https://martinfowler.com/bliki/AnemicDomainModel.html) ,\nand you probably don't like OOP much at all then, because bundling data\nwith behavior is what OO is about, usually.\n\n> **NOTE** It's OK not to like OOP these days. Its not the holy grail\n> anymore, mostly due to the usually messy concurrency characteristics\n> and problems resulting from typical object-oriented design which\n> revolves around imperative programming with direct manipulation of\n> mutable state, but that does not apply to PHP as much as to some other\n> languages due to its thread-confined nature/execution model.\n\nYou can not use a relational database in combination with an\nobject-oriented domain model without mapping.\n\nThe choices that lead to the need for ORM are the following:\n\n- *You can choose to use a relational database or not.*\n- *You can choose to create an object-oriented domain model or not.*\n\nIf you want a relational database and you want an object-oriented domain\nmodel, you need ORM, there is no choice. If you choose to use a\nrelational database but not an object-oriented domain model, you might\nneed some other form of object-relational or other mapping, depending on\nhow you want to model your application and your business logic around\nthe data in particular.\n\nPeople not being aware of the above two choices, especially the second\none, is unfortunately what makes some of them \"choose ORM\" and then\nsometimes getting frustrated. Using an ORM without even having or\nwanting a domain model and with the head still exclusively full of\ntables and rows, which are at the beginning and at the end of every\nthought about the software being built, is a wrong choice. With these\npreconditions, ORM quickly becomes a pain, and its wrong. Forcing your\nrelational data into objects even though you don't really know what to\ndo with them, maybe it just seems nice to have them as \"data\ncontainers\", is the wrong motivation. If you don't want to combine your\nbusiness data with your business behavior, something that can be done\nnicely in an OO domain model, then there is not much value in having\nobjects wrapped around your data. Some other, wrong motivations for\n\"choosing an ORM\", at least when they are the main motivations, are:\n\n- Database vendor independence\n- \"Hiding SQL\"\n\nThese are just additional benefits you can get but they are not the main\npurpose of an ORM tool. Then what is the main purpose? *State\nmanagement. Synchronizing the state of your in-memory object model with\na relational database for the purpose of persistent storage.* Neither\ndoes an ORM need to be database vendor independent, nor does it need to\nhide SQL to do this. Everything else is icing on the cake. If all you\nwant is to centralize your database access paths, which is a good thing\nfor caching and all, you don't need an ORM for that either, any database\naccess layer, existing or self-made, will do.\n\nI hope it is a bit clearer now that ORM is not a choice but a need that\nresults out of other choices.\n", + "date": "2010-04-20 00:00:00" }, { - "url": "/2008/10/02/doctrine-1-1-development-begins.html", - "slug": "doctrine-1-1-development-begins", - "title": "Doctrine 1.1 Development Begins", + "url": "/2008/02/16/doctrine-0-9-1-0-10-1-released.html", + "slug": "doctrine-0-9-1-0-10-1-released", + "title": "Doctrine 0.9.1 / 0.10.1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "", - "date": "2008-10-02 00:00:00" + "contents": "Today the Doctrine team is proud to announce the release of Doctrine\n0.9.1 and 0.10.1. Both releases bring many fixes and a few minor\nadditions for missing features in each of the branches. The next release\nof 0.10.2 will replace the 0.9 branch and all users will be recommended\nto upgrade as the 0.9 branch will no longer be supported and maintained\nby the core dev team. We except that 0.10.2 is due in two to three\nweeks. Please upgrade your existing projects from 0.9 to 0.10 and let us\nknow what issues you come across when switching so we can ensure a\nsmooth migration from 0.9 to 0.10 for all of our users.\n\nOn a side note, many new changes have been made to the website. A few\nvisual things and a few functional things. You will now find on the\nDownload page you can now get Doctrine in either zip or tgz format. We\nalso have our very own PEAR server so you are able to install Doctrine\nvia the pear command line interface. Our channel is located at\npear.phpdoctrine.org and can be discovered by running 'pear\nchannel-discover pear.phpdoctrine.org'\n", + "date": "2008-02-16 00:00:00" }, { - "url": "/2009/06/17/special-price-offer-symfony-1-2-doctrine-training-workshop.html", - "slug": "special-price-offer-symfony-1-2-doctrine-training-workshop", - "title": "Special Price Offer: Symfony 1.2 + Doctrine Training Workshop", + "url": "/2016/01/05/orm-2-5-4.html", + "slug": "orm-2-5-4", + "title": "Doctrine ORM 2.5.4 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n[2.5.4](https://github.com/doctrine/orm/releases/tag/v2.5.4).\n\nThis release fixes an issue with how identifiers are used when building\nsecond level cache entries during hydration.\n[\\#1568](https://github.com/doctrine/orm/pull/1568)\n\nInstallation\n============\n\nYou can install the ORM component using Composer:\n\n```bash\ncomposer require doctrine/orm:~2.5.4\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/orm/issues).\n", + "date": "2016-01-05 00:00:00" + }, + { + "url": "/2008/09/09/doctrine-1-0-1-released.html", + "slug": "doctrine-1-0-1-released", + "title": "Doctrine 1.0.1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "As you all may know, I work for [Sensio Labs](https://sensiolabs.com)\n, the creators of the [Symfony](http://www.symfony-project.org)\nframework. Sensio offers trainings in many topics, but primarily Symfony\nand Doctrine. I will be teaching a training session June 29th to July\n1st in the San Francisco bay area that covers Symfony 1.2 and Doctrine\n1.0. We are having a little issue completely filling the class and I\nneed a few more trainees in order to fill the class to maintain the\ndate, otherwise we'll have to cancel.\n\nI am able to make a special offer to any interested parties on the price\nof the training. All things are negotiable. So if you would like to\nattend the 3 day workshop taught by myself and learn the best practices\nwhen using Symfony and Doctrine, contact me right away! Remember, the\nprice is completely negotiable so if you're a student or a member of a\ndevelopment team and would like to attend please contact me so we can\nnegotiate a price that works for you.\n\nYou can contact me at\n[jonathan.wage@sensio.com](mailto:jonathan.wage@sensio.com) to discuss\ndetails.\n", - "date": "2009-06-17 00:00:00" + "contents": "Today we would like to announce the immediate availability of the first\nmaintenance release of the Doctrine 1.0 branch. This release contains\nseveral important bug fixes and we recommend that you upgrade as soon as\npossible. You can upgrade via pear or download the package here.\n", + "date": "2008-09-09 00:00:00" }, { - "url": "/2009/06/16/doctrine-changing-homes.html", - "slug": "doctrine-changing-homes", - "title": "Doctrine changing homes", + "url": "/2008/03/29/using-doctrine-zend-framework.html", + "slug": "using-doctrine-zend-framework", + "title": "Using Doctrine with Zend Framework", "authorName": "jwage", "authorEmail": "", - "contents": "You all may have noticed the stability of the website going up and down\nrecently. Up until now we have been lucky to have our good friend Ian\nChristian(pookey in IRC) host all the Doctrine infrastructure for over 3\nwhole years! With Doctrine continuing to grow and move forward, it is\ntime to move on to greener pastures to a dedicated home.\n\nTonight we will try to begin the migration to our new home. Hopefully\nthis transition will be fairly seamless but we expect at least a little\ndowntime. We are moving the website, Trac and SVN all at once to avoid\nthe migration lasting over a long period of time. Thanks for your\npatience while we work through these issues.\n", - "date": "2009-06-16 00:00:00" + "contents": "Today, \"rubenv\" pinged me in IRC and told me he has put together an\narticle on how to get started using Doctrine with the Zend Framework.\nThe article is very simple and does not get in to the detailed usage of\nDoctrine, but it shows you how you to integrate the two frameworks\ntogether and even shows a very simple web application. The article can\nbe found here.\n", + "date": "2008-03-29 00:00:00" }, { - "url": "/2008/07/02/doctrine-1-0-and-symfony-1-2.html", - "slug": "doctrine-1-0-and-symfony-1-2", - "title": "Doctrine 1.0 and symfony 1.2", + "url": "/2008/07/26/doctrine-growth.html", + "slug": "doctrine-growth", + "title": "Doctrine growth", "authorName": "jwage", "authorEmail": "", - "contents": "This morning Fabien from the symfony project announced the roadmap for\nthe next major version of symfony, 1.2. He announced that Doctrine would\nbe officially supported as a \"first class citizen.\" The time couldn't be\nbetter as symfony 1.2 is scheduled to be released in October and\nDoctrine is slated to release 1.0 around the same time. This is good\nnews for Doctrine, symfony and more importantly PHP in general. I look\nforward to seeing what comes of all this in the coming months.\n", - "date": "2008-07-02 00:00:00" + "contents": "\n\nLast October 2007 we implemented some google analytics to our website to\nmonitor the growth of the community. Today the traffic has about doubled\nsince then. We average around 1000 unique visitors per day up from\naround 300 roughly 1 year ago. We expect the growth to continue and we\nlook forward what milestones we can reach together in the future. Check\nout the graph of absolute unique visitors from google analytics below.\n\n
\n\n
\n\n\n", + "date": "2008-07-26 00:00:00" }, { - "url": "/2008/12/11/double-dose-of-doctrine.html", - "slug": "double-dose-of-doctrine", - "title": "Double Dose of Doctrine", - "authorName": "jwage", + "url": "/2015/12/08/jira-issues-migration.html", + "slug": "jira-issues-migration", + "title": "Jira Issues Migration", + "authorName": "", "authorEmail": "", - "contents": "Today I am happy to introduce two new versions of Doctrine! We have made\navailable yet another maintenance release for the 1.0 version,\n[1.0.5](https://www.doctrine-project.org/download). This release contains\ndozens of fixes that are logged\n[here](https://www.doctrine-project.org/change_log/1_0_5). In addition to\nthe monthly 1.0.x maintenance release, we have made available the [first\nbeta of the 1.1](https://www.doctrine-project.org/download) development\nbranch of Doctrine.\n\nThis is exciting news because this means we are very close to releasing\na stable version. We just need to work out the last final kinks and we\nneed your help to do it. You can read about what has changed in the\n[upgrade to 1.1\nfile](http://svn.doctrine-project.org/branches/1.1/UPGRADE_TO_1_1).\n", - "date": "2008-12-11 00:00:00" + "contents": "We have started the migration of all our Jira tickets to Github Issues.\n\nThese last months we had a lot of troubles with our Jira and we just\ncannot find the time to update and maintain it anymore. On top of it,\nspam is causing more maintenance for us deleting user accounts and\ntickets. Sadly ther seeems to be no appropriate spam protection plugins\nand we couldn't prevent this.\n\nWe are by no means unsatisfied with Jira, and to be honest we have been\nfighting this migration step as long as possible. Github Issues is a\nsmall fish against Jira's powers, especially issue filtering, bulk\noperations and the Agile board. But for Doctrine its best to migrate to\nGithub to reduce our maintenance and operations overhead and more\ntightly integrate with the tooling we already have.\n\nFor now Common, DBAL and ORM issues have been imported into Github using\nthe [amazing Importer\nAPI](https://gist.github.com/jonmagic/5282384165e0f86ef105). Even though\nthis API is still in Beta, it works quite flawlessly. If you are\ninterested in our migration scripts see [this repository in\nGithub](https://github.com/doctrine/jira-github-issues). They are very\nlow-level and procedural but get the job done.\n\nJira has been changed into Read-Only mode for Common, DBAL and ORM\nprojects, please use the Github based issue trackers instead from now\non:\n\n- [ORM](https://github.com/doctrine/orm/issues)\n- [DBAL](https://github.com/doctrine/dbal/issues)\n- [Common](https://github.com/doctrine/common/issues)\n\nWhat is still missing?\n======================\n\n- Versions from Jira need to be exported and imported into Github\n releases with their release date, changelog and description.\n\n- Permanent redirects for both Jira versions and issues to their\n respective Github counterparts have to be prepared and dynamically\n generated from our webserver, when we decommission Jira. This will\n help us keep deeplinks to Jira issues.\n\n- Cleanup, categorize and prepare the newly imported Github issues.\n\nWe hope to complete this steps this week. The last one will take a bit\nlonger.\n\nWhat we could not import\n========================\n\nWe were not able to import attachments, issue status transitions and\nuser/reporter assignments between Jira and Github. This information will\nbe lost once we disable Jira.\n", + "date": "2015-12-08 00:00:00" }, { - "url": "/2022/03/24/opencollective.html", - "slug": "opencollective", - "title": "On Doctrine Sponsoring with the help of OpenCollective", - "authorName": "Benjamin Eberlei", - "authorEmail": "kontakt@beberlei.de", - "contents": "To simplify our own administrative burden, we have decided to move over the\nfunds to [OpenCollective](https://opencollective.com/doctrine), primarily\nmotivated by the success and positive experience of the new PHP Foundation.\n\nWe have started raising money for the Doctrine Project in 2019 through Patreon and\nGithub Sponsors to support the project. It was planned to organize core team\nget-togethers/hackathons, but due to the pandemic we haven't been able to do this.\nIn addition the legal and tax implications of raising money also caused us\nsome headaches. \n\nThe move to OpenCollective will allow us to delegate much of the administrative\nwork to them for a small percentage of the raised capital. The fee is a much\nsmaller amount than the taxes that we had to pay on the raised money\npreviously, so it is a win-win for us.\n\nWe want to assure our sponsors that we still plan to make use of the funds\nto further the Doctrine project and we are actively looking to increase our funding\nfor these goals:\n\n- Regularly organize hackathons for Doctrine Core team contributors, including\n 3-4 days of accommodation, food and travel for roughly 10-15 people.\n\n- Infrastructure, servers and hosting.\n\n- Marketing material such as stickers, t-shirts and other small things.\n\n- If the budget increases significantly we might be able to pay someone part-\n or full-time to do maintenance work such as responding to and processing\n issues, prepare for new PHP releases and general cleanups of the codebase.\n\nAs such we hope to convince you to sponsor Doctrine through either our [Github\nSponsors](https://github.com/sponsors/doctrine/) or\n[OpenCollective](https://opencollective.com/doctrine) directly.\n", - "date": "2022-03-24 00:00:00" + "url": "/2008/08/06/master-and-slave-connections.html", + "slug": "master-and-slave-connections", + "title": "Master and Slave Connections", + "authorName": "jwage", + "authorEmail": "", + "contents": "In this new cookbook recipe we demonstrate how you can setup multiple\nconnections and use them as master/slaves. All select statements are\nissued to the slaves and any insert/update/delete statements are issued\nto the master. This example accomplishes the functionality by extending\nDoctrine\\_Query and Doctrine\\_Record. This article is a perfect example\nof how you can extend and override functionality in Doctrine to\naccomplish your needs when Doctrine doesn't necessarily have a native\nsolution ready to go for you.\n", + "date": "2008-08-06 00:00:00" }, { - "url": "/2021/04/19/dbal-2.13.1-3.1.0.html", - "slug": "dbal-2.13.1-3.1.0", - "title": "New Release: Doctrine DBAL 2.13.1 and 3.1.0 with important Forward Compatibility fix", - "authorName": "Benjamin Eberlei", - "authorEmail": "kontakt@beberlei.de", - "contents": "Last month [we released DBAL\n2.13.0](https://www.doctrine-project.org/2021/03/29/dbal-2.13.html) as an\nimportant push for the ecosystem towards DBAL 3 with an extensive deprecation\nand forward compatibility layer.\n\nWe made a few mistakes, given that the forward compatibility layer is quite complex.\nAs such we have now released Doctrine DBAL 2.13.1 and 3.1.0 with two new APIs\nthat improve the forward compatiblity.\n\nThe problem lies in `Statement::execute()`: 2.13.0 would return a `bool` and\n3.0.0 would return a `Result` from this method. This kind of API change cannot\nbe handled with a forward compatibility.\n\nAs such we introduced two new APIs on `Statement` that replace `execute()`.\nWhen the old code was:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$statement->execute();\n\n$rows = $statement->fetchAll();\n```\n\nThen the new code is now:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$result = $statement->executeQuery();\n\n$rows = $result->fetchAllAssociative();\n```\n\nThe DBAL 2.13 forward compatiblity layer supports both versions of all code and\nreturns a Statement/Result hybrid that has all the APIs that the DBAL Statement\nhad up until version 2.12. This way you can move at your own pace from the old\nto the new API in your code.\n\nThank you again to [mdumoulin](https://github.com/mdumoulin) for the work on\nimproving the forward compatiblity and to [Sergei Morozov](https://twitter.com/srgmrzv)\nfor the thorough reviews and comments.\n\nAgain I want to highlight the Runtime Deprecations library that we introduced\nto support this migration. You can integrate this with your log stack during\ndevelopment and testing:\n\n```php\nuse Doctrine\\Deprecations\\Deprecation;\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('doctrine');\n$log->pushHandler(new StreamHandler('deprecations.log', Logger::INFO));\n\nDeprecation::enableWithPsrLogger($log);\n```\n\nOr alternatively using PHP's global error handler:\n\n```php\nDeprecation::enableWithTriggerError();\n```\n\nSee the [2.13 blog\npost](https://www.doctrine-project.org/2021/03/29/dbal-2.13.html) for more\ninformation about the migration to DBAL 3 and strategy recommendations.\n", - "date": "2021-04-19 00:00:00" + "url": "/2018/07/12/common-2-9-and-dbal-2-8-and-orm-2-6-2.html", + "slug": "common-2-9-and-dbal-2-8-and-orm-2-6-2", + "title": "Phasing out Doctrine Common & release of DBAL 2.8 and ORM 2.6.2", + "authorName": "Michael Moravec", + "authorEmail": "doctrine@majkl.me", + "contents": "### Common 2.9 and phasing out the package\n\nAs another step in the ongoing effort to eliminate `doctrine/common`,\nthere are now three new separate Doctrine packages:\n\n * [`doctrine/persistence`](https://github.com/doctrine/persistence)\n * [`doctrine/event-manager`](https://github.com/doctrine/event-manager)\n * [`doctrine/reflection`](https://github.com/doctrine/reflection)\n\nThis release introduces the following deprecations:\n\n * `Doctrine\\Common\\Proxy` component is deprecated, use\n [`ocramius/proxy-manager`](https://github.com/ocramius/ProxyManager) instead;\n * `Doctrine\\Common\\Util\\Debug` is deprecated, use\n [`symfony/var-dumper`](https://github.com/symfony/var-dumper) instead;\n * `Doctrine\\Common\\Lexer` is deprecated, use `Doctrine\\Common\\Lexer\\AbstractLexer`\n from [`doctrine/lexer`](https://github.com/doctrine/lexer) or migrate to\n [hoa/compiler](https://github.com/hoaproject/Compiler) instead;\n * `Doctrine\\Common\\Util\\Inflector` is deprecated, use `Doctrine\\Common\\Inflector\\Inflector`\n from [`doctrine/inflector`](https://github.com/doctrine/inflector) instead;\n * `Doctrine\\Common\\Util\\ClassUtils` is deprecated without replacement;\n * `Doctrine\\Common\\Version` is deprecated, refrain from checking Common version at runtime;\n * `Doctrine\\Common\\CommonException` is deprecated without replacement.\n\nIn addition to that, there will be no `doctrine/common` 3.0 and the package\nwill be gradually phased out.\n\nVersion 2.x will be maintained at least until ORM 3.0 is released, ensuring\ncompatibility with the latest PHP and providing bugfixes, but it will\nno longer ship any new features.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/common/releases/tag/v2.9.0).\n\n### DBAL 2.8.0\n\nDBAL 2.8.0 is a minor release of Doctrine DBAL that aggregates over\n30 fixes and improvements developed over the last 3 months.\n\nThe dependency on `doctrine/common` is removed. DBAL now\ndepends on `doctrine/cache` and `doctrine/event-manager` instead.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/dbal/releases/tag/v2.8.0).\n\n### ORM 2.6.2\n\nORM 2.6.2 comes as a regular bugfix release.\n\nIt no longer uses the long ago deprecated Lexer and Inflector from `doctrine/common`.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/orm/releases/tag/v2.6.2).\n", + "date": "2018-07-12 00:00:00" }, { - "url": "/2010/03/01/introduction-to-doctrine-2-webinar.html", - "slug": "introduction-to-doctrine-2-webinar", - "title": "Introduction to Doctrine 2 Webinar", - "authorName": "jwage", - "authorEmail": "", - "contents": "", - "date": "2010-03-01 00:00:00" + "url": "/2014/09/11/instantiator-1-0-0.html", + "slug": "instantiator-1-0-0", + "title": "Doctrine Instantiator 1.0.0 released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We released [Doctrine Instantiator\n1.0.0](https://github.com/doctrine/instantiator/releases/tag/1.0.0)\nseveral weeks ago.\n\nThis project has been migrated from\n[ocramius/instantiator](https://github.com/Ocramius/Instantiator) into\nthe doctrine organization to have better maintenance, support as well as\nhandling of security related issues, which is a priority for us.\n\nThe migration has been done because all doctrine ORM and ODM projects\nwere affected by a quite big [backwards-incompatible change in PHP\n5.4.29 and PHP 5.5.13](https://bugs.php.net/bug.php?id=67072), which\n[was partially solved in PHP\n5.6.0-RC3](https://github.com/php/php-src/pull/733). The main tracking\nbug for this problem is \\`DDC-3120\\`\\_.\n\n[Doctrine Instantiator](https://github.com/doctrine/instantiator)\nprovides a simple API to build objects without directly relying on the\n[serialization\nhack](https://www.doctrine-project.org/2010/03/21/doctrine-2-give-me-my-constructor-back.html)\nthat has been explicitly used by all of our data mappers for quite some\ntime.\n\nInstallation\n============\n\nYou can install [Doctrine\nInstantiator](https://github.com/doctrine/instantiator) using Composer\nand the following `composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/instantiator\": \"1.0.*\"\n }\n}\n~~~~\n", + "date": "2014-09-11 00:00:00" }, { - "url": "/2009/11/10/doctrine-1-2-0-beta2-released.html", - "slug": "doctrine-1-2-0-beta2-released", - "title": "Doctrine 1.2.0-BETA2 Released", + "url": "/2009/05/22/glimpse-of-doctrine-2-0.html", + "slug": "glimpse-of-doctrine-2-0", + "title": "Glimpse of Doctrine 2.0", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am happy to bring you the second beta of the latest Doctrine 1.2\nversion. This is a solid bug fix release and we're getting very close to\na stable 1.2 version of Doctrine! It is recommended that you upgrade and\n[report](https://www.doctrine-project.org/jira) any issues in\n[Jira](https://www.doctrine-project.org/jira) to help us test for\nregressions between 1.1 and 1.2.\n\nTake a look at the\n[changelog](https://www.doctrine-project.org/change_log/1_2_0_BETA2) and\ntry it out by [downloading](https://www.doctrine-project.org) it.\n", - "date": "2009-11-10 00:00:00" + "contents": "As you all probably already know, we have been working on Doctrine 2.0\npretty much since before we released Doctrine 1.0. This effort has been\nprimarily led by Roman and he has done an excellent job with things so\nfirst a big thanks goes to him.\n\nA few quick facts\n=================\n\n- Doctrine 2.0 will require PHP 5.3\n- Doctrine 2.0 is FAST\n- We will extend the support life of 1.x\n\nWe have decided to move forward with Doctrine 2.0 requiring PHP 5.3.\nThis release is a significant one, both for PHP and Doctrine, so we\ndecided to continue support for the 1.x series of Doctrine to give the\nadoption of PHP 5.3 and Doctrine 2.0 more time.\n\nHydration Performance\n=====================\n\nIn Doctrine 2.0 the performance when hydrating data is greatly improved.\nThe difference in speed is a combination of code changes and the\nperformance increase from using PHP 5.3.\n\n| Version | Seconds | \\# Records | | ---------- | ------------|\n------------- | | 1.1 | 4.3435637950897 | 5000 | | 2.0 | 1.4314442552312\n| 5000 | | 2.0 | 3.4690098762512 | 10000 |\n\nA few code snippets\n===================\n\nSchema Metadata and Models\n==========================\n\nIn Doctrine 1.1 a `Doctrine_Record` might look something like the\nfollowing.\n\n~~~~ {.sourceCode .php}\nhasColumn('id', 'integer', null, array(\n 'primary' => true,\n 'auto_increment' => true\n ));\n $this->hasColumn('username', 'string', 255);\n }\n}\n\n**NOTE** Notice how you have to extend the base class and\neverything is a public instance. As you probably know this has lots\nof negative effects as it imposes properties and methods on your\nmodels.\n~~~~\n\nIn Doctrine 2.0 this limitation was removed and you no longer need to\nextend a base class.\n\n~~~~ {.sourceCode .php}\n\n\nToday we have released a new version, 0.11.1. As with all point releases\nit is a bug fix only release. With over 81 tickets closed, this is\ndefinetly a significant release for Doctrine towards 1.0. We recommend\nthat you upgrade.\n\n\n\nWe have also created the 1.0 branch and will begin actively working on\nit. We have hit the final straight away towards 1.0! This was originally\nslated to be the 0.12 branch but we feel it is ready and we will spend\nthe next 2 months furiously working on tickets before we release it on\nSeptember 1st. We will have some short intermediate BETA and RC releases\nbefore then but these will primarily be bug fix releases only. Make some\nhype please, thanks. ;)\n\n
\n\n\n", + "date": "2008-07-12 00:00:00" }, { - "url": "/2009/09/01/doctrine2-preview-release.html", - "slug": "doctrine2-preview-release", - "title": "Doctrine 2 Preview Release", - "authorName": "romanb", + "url": "/2009/06/19/cross-database-joins.html", + "slug": "cross-database-joins", + "title": "Cross Database Joins", + "authorName": "jwage", "authorEmail": "", - "contents": "Exactly one year ago today we released Doctrine 1.0 stable, which was on\nthe birthday of Jon. Again, today we have chosen the birthday of Jon to\nrelease the first preview of Doctrine 2. This is an alpha release that\nis not intended for production use.\n\nDoctrine 2 marks the beginning of a new approach to ORM with Doctrine.\nIt represents a rewrite of more than 90% of the existing codebase. The\nnew key concepts behind Doctrine 2 are to put your domain model more\ninto focus and to provide transparent persistence where the persistence\nis a service and not an inherent property of domain classes. This has a\nlot of advantages like decoupling your valuable business logic from the\npersistence layer and easy testability of your domain model.\n\nPackages\n========\n\nDoctrine 2 is reorganized into reusable layers that are available as\nseparate packages. The Doctrine 2 Core consists of the following\npackages:\n\n- Doctrine Common (Generic components, high re usability)\n- Doctrine DBAL (The database abstraction layer, includes: Common)\n- Doctrine ORM (The ORM tools, includes: Common + DBAL)\n\nAll of these packages are currently distributed and maintained\nsynchronously which means they are released together and share the same\nversion numbers. This may change in the future. These three packages are\navailable as separate downloads even though you will most likely want to\ndownload the ORM package which already contains the Common and DBAL\npackages.\n\nFeatures\n========\n\nThis Preview Release is mainly about the core ORM functionality and\nfeatures of Doctrine 2, like mapping drivers, DQL, association mapping,\ninheritance mapping, change tracking, etc. Most of the supporting tools\nthat you are used to for rapid development like the CLI, migrations,\nbehaviors and validation have not yet been ported to Doctrine 2 and are\nstill under heavy development, most of them will end up as loosely\ncoupled extensions.\n\nMapping drivers\n===============\n\nA mapping driver is a particular strategy for providing ORM metadata to\nDoctrine 2. This Preview Release contains mapping drivers for docblock\nannotations, XML and YAML. The XML and YAML drivers are still in an\nexperimental stage and while we encourage you to use them, you may\nencounter more issues than with the docblock annotation driver as it is\nthe primary driver used in our development.\n\nDocumentation\n=============\n\nThe documentation for Doctrine 2 can be found\n[here](https://www.doctrine-project.org/projects/doctrine-orm/en/current/). Please be\naware that the documentation is still a work in progress and not all\nareas have been completed.\n\nSandbox\n=======\n\nTo get started quickly, please check out our [sandbox quickstart\ntutorial](https://www.doctrine-project.org/projects/doctrine-orm/en/current/tutorials/getting-started.html).\nYou can also obtain Doctrine 2.0.0 ALPHA1 via a PEAR package like normal\nwhich can be found on the\n[download](https://www.doctrine-project.org/download)\n\nWe want to encourage everyone to start experimenting with the new\ngeneration of Doctrine in order to get familiar with it and to help find\nany outstanding issues.\n\nAs always, please report any issues and feature requests through\n[trac](http://trac.doctrine-project.org).\n\nThank you for using Doctrine.\n", - "date": "2009-09-01 00:00:00" + "contents": "Cross Database Joins\n====================\n\nIn Doctrine, joining data across databases is not technically\n\"supported\" by a designed feature, but you can make it work by tricking\nDoctrine a little bit.\n\nIn this article I'll show you how you can setup a database schema that\nspecifies relationships across two databases and then issue a query\nwhich joins data from these two databases.\n\nI used the Doctrine sandbox to prepare this test so if you want to try\nit, you can use it too.\n\nDatabase Connections\n====================\n\nFirst lets setup our two database connections we'll use to query from.\nModify the `config.php` file included with the sandbox and replace the\ndefault single connection with the following code.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->leftJoin('u.Profile p');\n\necho $q->getSql();\n~~~~\n\nThe above code would output the following SQL query.\n\n [sql]\n SELECT d.id AS d__id, d.username AS d__username, d.password AS d__password, d2.id AS d2__id, d2.user_id AS d2__user_id, d2.first_name AS d2__first_name, d2.last_name AS d2__last_name FROM doctrine_test1.user d LEFT JOIN doctrine_test2.profile d2 ON d.id = d2.user_id\n\n **NOTE** Notice how in the above SQL that is generated it include\n the database name and the table name. So now the query is able to\n join across databases if your RDBMS supports it.\n\nNow lets execute the above query and look at the results.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->leftJoin('u.Profile p');\n\n$users = $q->fetchArray();\n\nprint_r($users);\n~~~~\n\nThe above would output just exactly what you'd expect.\n\n Array\n (\n [0] => Array\n (\n [id] => 1\n [username] => jwage\n [password] => changeme\n [Profile] => Array\n (\n [id] => 1\n [user_id] => 1\n [first_name] => string(255)\n [last_name] => string(255)\n )\n\n )\n\n )\n\nThe data from the `User` model came from one database, and the data from\nthe `Profile` model came from the other database.\n\n> **NOTE** This will only work if your database supports foreign keys\n> and joins across databases. I know MySQL does support this but I am\n> unsure about others. This same method can be used to query for data\n> across PostgreSQL schemas too.\n\nThat is it! Joining data from across different databases is no problem\nin Doctrine.\n\n> **CAUTION** This is not a designed feature of Doctrine and you may\n> experience edge cases that may not work as you'd expect. This is just\n> useful if you need to join data across databases and if you experience\n> edge cases you can work around them in your project.\n", + "date": "2009-06-19 00:00:00" }, { - "url": "/2014/09/12/dbal-250rc2.html", - "slug": "dbal-250rc2", - "title": "Doctrine DBAL 2.5 RC2", - "authorName": "", + "url": "/2009/02/04/using-behaviors-to-share-relationship-properties.html", + "slug": "using-behaviors-to-share-relationship-properties", + "title": "Using Behaviors to Share Relationship Properties", + "authorName": "jwage", "authorEmail": "", - "contents": "We are happy to announce the immediate availability of [Doctrine DBAL\n2.5 RC2](https://github.com/doctrine/dbal/releases/tag/v2.5.0-RC2),\nwhich fixes over 30 bugs including SQL Server LIMIT/OFFSET issues,\nseveral identifiers quotation issues, schema introspection related\nissues and many more. This release candidate also introduces some nice\nnew features and improvements since [Doctrine DBAL 2.5\nBETA3](https://github.com/doctrine/dbal/releases/tag/v2.5.0-BETA3):\n\n- Support for connection flags in the mysqli driver\n- Support for Spatial Indexes in MySQL\n- Support date arithmetic interval methods for seconds, minutes,\n weeks, quarters and years\n- Support for Partial Indexes in PostgreSQL and SQLite\n- `Doctrine\\DBAL\\Connections\\MasterSlaveConnection` can now be closed\n via `close()`\n- Ability to retrieve parameter types from the query builder\n- Make table alias in query builder optional for simple queries\n\nWe hope this will be the last release candidate before final release and\nyou should expect to see the finished DBAL 2.5 very soon.\n\nFor details about all the new features in DBAL 2.5, see the [previous\nrelease blog\npost](https://www.doctrine-project.org/2014/02/21/doctrine_2_5_beta3.html)\nand the [Jira\nRelease](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10523).\n\nYou can install the Release Candidate through Composer with the\nfollowing version constraint:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/dbal\": \"2.5.0@RC\"\n }\n}\n~~~~\n\nDBAL 2.5 is backwards compatible to 2.4 and earlier in everything except\nfor small details (See `UPGRADE.md`). You can even test Doctrine DBAL\n2.5 with a stable ORM 2.4 version.\n\nIf you find any problems with this beta, please report a bug [on\nJira](https://www.doctrine-project.org/jira).\n", - "date": "2014-09-12 00:00:00" + "contents": "Define The Schema\n=================\n\nIn this article we will demonstrate some more ways to add functionality\nto Doctrine by using the behavior system. We will call this behavior\n`SharedProperties` and it allows you to share properties between your\nmodels and one-to-one relationships. Here is an example schema that will\nmake use of the behavior we will write.\n\n [yml]\n Entity:\n actAs:\n Sluggable:\n fields: [name]\n Timestampable:\n columns:\n name: string(255)\n is_active:\n type: boolean\n default: false\n\n BlogPost:\n actAs:\n SharedProperties:\n relations: [Entity]\n columns:\n title: \"string(255)\"\n body: clob\n\n User:\n actAs:\n SharedProperties:\n relations: [Entity]\n columns:\n username: string(255)\n password: string(255)\n\n Administrator:\n actAs:\n SharedProperties:\n relations: [User]\n columns:\n responsibilities: string(255)\n\nThe schema should be somewhat self-explanatory. Each model that acts as\n`SharedProperties` you must specify an array of model names or existing\nrelationship aliases. Our behavior will automatically add foreign keys\nfor the list of models and instantiate a one-to-one relationship between\nthe models automatically.\n\nWrite the Template\n==================\n\nLets write the first part of our template that simply adds a column for\neach of the listed `relations`:\n\n~~~~ {.sourceCode .php}\n_options = $options;\n }\n\n public function setTableDefinition()\n {\n foreach ($this->_options['relations'] as $relation) {\n $columnName = Doctrine_Inflector::tableize($relation) . '_id';\n if (!$this->_table->hasColumn($columnName)) {\n $this->hasColumn($columnName, 'integer');\n }\n }\n }\n}\n\n**NOTE** You will notice we add columns for each of the\n``relations`` specified if the column does not already exist. We\nwill use these columns to automatically create the\nrelationships/foreign keys between the models if they don't already\nexist in the next step.\n~~~~\n\nEnhance the Template\n====================\n\nNow lets enhance our template and add a `setUp()` method to instantiate\nour relationships between the list of `relations` and the columns we\nadded in the previous step:\n\n~~~~ {.sourceCode .php}\n_options['relations'] as $model) {\n $table = $this->_table;\n $local = Doctrine_Inflector::tableize($model) . '_id';\n $foreign = Doctrine::getTable($model)->getIdentifier();\n $this->_makeRelation($table, $model, $local, $foreign, true);\n }\n\n foreach ($this->_options['relations'] as $model) {\n $table = Doctrine::getTable($model);\n $local = $table->getIdentifier();\n $foreign = Doctrine_Inflector::tableize($model) . '_id';\n $this->_makeRelation($table, $this->_table->getOption('name'), $table->getIdentifier(), $foreign);\n }\n }\n\n protected function _makeRelation(Doctrine_Table $table, $model, $local, $foreign, $cascade = false)\n {\n if (!$table->hasRelation($model)) {\n $options = array('local' => $local, 'foreign' => $foreign);\n if ($cascade) {\n $options['onDelete'] = 'CASCADE';\n }\n $table->bind(array($model, $options), Doctrine_Relation::ONE);\n }\n }\n}\n~~~~\n\nGenerated SQL\n=============\n\nThis code we've added now makes a one-to-one relationship between the\nmodels that act as `SharedProperties` and the list of models specified.\nSo for example, `Entity` has one `BlogPost` and `BlogPost` has one\n`Entity`. The above models at this point would generate the following\nSQL:\n\n [sql]\n CREATE TABLE administrator (id BIGINT AUTO_INCREMENT, responsibilities VARCHAR(255), user_id BIGINT, INDEX user_id_idx (user_id), PRIMARY KEY(id)) ENGINE = INNODB;\n\n CREATE TABLE blog_post (id BIGINT AUTO_INCREMENT, title VARCHAR(255), body LONGTEXT, entity_id BIGINT, INDEX entity_id_idx (entity_id), PRIMARY KEY(id)) ENGINE = INNODB;\n\n CREATE TABLE entity (id BIGINT AUTO_INCREMENT, name VARCHAR(255), is_active TINYINT(1) DEFAULT '0', slug VARCHAR(255), created_at DATETIME, updated_at DATETIME, UNIQUE INDEX sluggable_idx (slug), PRIMARY KEY(id)) ENGINE = INNODB;\n\n CREATE TABLE user (id BIGINT AUTO_INCREMENT, username VARCHAR(255), password VARCHAR(255), entity_id BIGINT, INDEX entity_id_idx (entity_id), PRIMARY KEY(id)) ENGINE = INNODB;\n\n ALTER TABLE administrator ADD FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE CASCADE;\n\n ALTER TABLE blog_post ADD FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE;\n\n ALTER TABLE user ADD FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE;\n\nSharing Properties/Methods\n==========================\n\nNow to get to the fun, the main purpose of doing all this is to share\nthe properties of these relationships. We can accomplish this by using\nthe `Doctrine_Record_Filter` feature and some magic PHP `__call()`\nfunctionality. First lets modify our template to attach a new record\nfilter.\n\n> **TIP** Records filters in Doctrine allow you to handle all unknown\n> properties access on a Doctrine object. This allows us to forward the\n> calls on to the relationships so you can access properties from them.\n\n~~~~ {.sourceCode .php}\n_table->unshiftFilter(new SharedPropertiesFilter($this->_options));\n }\n\n // ...\n}\n~~~~\n\nNow that we have attached our filter we need to write that class:\n\n~~~~ {.sourceCode .php}\n_options = $options;\n }\n\n public function init()\n {\n foreach ($this->_options['relations'] as $model) {\n $this->_table->getRelation($model);\n }\n }\n\n public function filterSet(Doctrine_Record $record, $name, $value)\n {\n foreach ($this->_options['relations'] as $model) {\n try {\n $record->$model->$name = $value;\n return $record;\n } catch (Exception $e) {}\n }\n throw new Doctrine_Record_UnknownPropertyException(sprintf('Unknown record property / related component \"%s\" on \"%s\"', $name, get_class($record)));\n }\n\n public function filterGet(Doctrine_Record $record, $name)\n {\n foreach ($this->_options['relations'] as $model) {\n try {\n return $record->$model->$name;\n } catch (Exception $e) {}\n }\n throw new Doctrine_Record_UnknownPropertyException(sprintf('Unknown record property / related component \"%s\" on \"%s\"', $name, get_class($record)));\n }\n}\n~~~~\n\nNow you can see this filter checks to see if the property exists on any\nof the `relations` specified otherwise throws the normal\n`Doctrine_Record_UnknownPropertyException`.\n\nThe last thing we need to do is add a magic `__call()` function to our\ntemplate to handle the forwarding of any unknown methods to the\n`relations`:\n\n~~~~ {.sourceCode .php}\ngetInvoker();\n foreach ($this->_options['relations'] as $model) {\n try {\n return call_user_func_array(array($invoker->$model, $method), $arguments);\n } catch (Exception $e) {\n continue;\n }\n }\n }\n}\n~~~~\n\nThis is required if we have functions defined on the models and want to\nbe able to access these methods. So for example if we were to add a\n`setPassword()` method to the generated `User` class like the following:\n\n~~~~ {.sourceCode .php}\n_set('password', md5($password));\n }\n}\n~~~~\n\nWithout the above `__call()` function we would not be able to do the\nfollowing:\n\n~~~~ {.sourceCode .php}\nsetPassword('new_password');\n\n**TIP** **Auto Accessor and Mutator Overriding**\n\nIf you want Doctrine to automatically override accessors with\nmatching ``set*()`` and ``get*()`` functions then you need to\nenable the ``auto_accessor_override`` attribute in your\nconfiguration where you create your connections and set Doctrine\nattributes:\n~~~~\n\n~~~~ {.sourceCode .php}\nsetAttribute('auto_accessor_override', true);\n\nNow with that attribute the following is possible. Instead of\nhaving to call the method ``setPassword()``, Doctrine sees you are\nsetting the ``password`` and a method named ``setPassword()``\nexists so it uses it to do the mutating.\n~~~~\n\n~~~~ {.sourceCode .php}\npassword = 'new_password';\n~~~~\n\nExample Usage\n=============\n\nThat is it! Our behavior is implemented and we are ready to write some\ncode that use our new models.\n\nCreating New Records\n--------------------\n\n~~~~ {.sourceCode .php}\nname = 'Jonathan H. Wage';\n$admin->username = 'jwage';\n$admin->password = 'changeme';\n$admin->is_active = 1;\n$admin->responsibilities = 'Train all the PHP developers!';\n$admin->save();\n~~~~\n\nNow that code results in the following structure being persisted to the\ndatabase:\n\n~~~~ {.sourceCode .php}\ntoArray(true));\n/*\nArray\n(\n [id] => 2\n [responsibilities] => Train all the PHP developers!\n [user_id] => 2\n [User] => Array\n (\n [id] => 2\n [username] => jwage\n [password] => 4cb9c8a8048fd02294477fcb1a41191a\n [entity_id] => 3\n [Entity] => Array\n (\n [id] => 3\n [name] => Jonathan H. Wage\n [is_active] => 1\n [slug] => jonathan-h-wage\n [created_at] => 2009-02-04 16:01:12\n [updated_at] => 2009-02-04 16:01:12\n )\n\n )\n\n)\n*/\n~~~~\n\nData Fixtures\n-------------\n\nSimilarly, the following data fixtures would be possible:\n\n [yml]\n BlogPost:\n BlogPost_1:\n name: Test Blog Post\n title: \"This is a test blog post\"\n body: This is a test blog post\n\n Administrator:\n Administrator_1:\n name: Test Manager\n username: jwage\n password: changeme\n responsibilities: Overseeing development department\n\nQuerying For and Accessing Data\n-------------------------------\n\nYou can query for these relationships as well:\n\n~~~~ {.sourceCode .php}\nfrom('Administrator a')\n ->leftJoin('a.User u')\n ->leftJoin('u.Entity e')\n ->where('u.username = ?', 'jwage');\n\n$user = $q->fetchOne();\necho $user['created_at'];\n~~~~\n\nThe above code would output the value of the `created_at` column that\nactually exists in the `Entity` model that is available through the\n`Administrator->User->Entity` relations.\n", + "date": "2009-02-04 00:00:00" }, { - "url": "/2012/09/17/doctrine-2-3-rc4.html", - "slug": "doctrine-2-3-rc4", - "title": "Doctrine 2.3.0 RC4 released", - "authorName": "beberlei", + "url": "/2010/04/27/doctrine-2-0-0-beta1-released.html", + "slug": "doctrine-2-0-0-beta1-released", + "title": "Doctrine 2 BETA1 Released", + "authorName": "romanb", "authorEmail": "", - "contents": "**17.9.2012**\n\nWe released another release candidate of our upcoming Doctrine 2.3.0\nversion. This includes the Common, DBAL and ORM packages.\n\nThis release trys to keep backwards compatibility to every previous\nrelease as much as possible, however some slight changes might be\nnecessary to your applications. See the UPGRADE files of each project\nfor details:\n\n- [ORM](https://github.com/doctrine/orm/blob/master/UPGRADE.md)\n- [DBAL](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\n\nSee the [2.3 Beta blog\npost](https://www.doctrine-project.org/2012/07/16/doctrine-2-3-beta.html) for\nsome information about changes in 2.3.\n\nYou can install the release candidate through\n[Github](https://github.com/doctrine/orm) or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.0-RC4\"\n },\n \"minimum-stability\": \"dev\"\n }\n\nIf you find any problems with your applications please report them on\nour [bugtracker](https://www.doctrine-project.org/jira).\n\nWe hope to release the final version of Doctrine 2.3 after this release\ncandidate. Please test your applications with this.\n", - "date": "2012-09-17 00:00:00" + "contents": "Today we are pleased to announce the immediate release of the first beta\nversion of Doctrine 2. It comes with some delay which was caused partly\nby our move to git and github and the switch to the Symfony Console\ncomponent for the CLI. We had to confront the alpha users with quite\nsome backwards compatibility problems and we apologize for that.\nStarting with the beta period you can expect the amount of backwards\nincompatible changes to be much lower.\n\nSince the ALPHA4 release over 160 issues have been resolved. You can\nfind the full changelog\n[here](https://www.doctrine-project.org/jira/secure/ReleaseNote.jspa?projectId=10032&styleName=Html&version=10030).\n\nSome of the most important changes were the shift towards the Symfony\n(2) Console component for the CLI as well as the introduction of the\ninversedBy attribute for bidirectional associations, among others. For\nsome help with upgrading from ALPHA4 to BETA1, please consult [the\nupgrade page](https://www.doctrine-project.org/upgrade/2_0).\n\nYou can get the new release as usual from our [download\npage](https://www.doctrine-project.org/download) or [directly from\ngithub](https://github.com/doctrine/orm).\n\nWe would like to thank all the adopters of the early alpha releases. All\nyour issue reports, feature and enhancement requests and general\nfeedback and criticism have helped a lot to move the project forward.\n\nLooking forward, we will likely have at least 2 or 3 beta releases,\nabout every 1-2 months, before we go RC. Once that happens, the API is\nultimately frozen until the stable release.\n", + "date": "2010-04-27 00:00:00" }, { - "url": "/2010/08/10/mongodb-odm-atomic-operator-improvements.html", - "slug": "mongodb-odm-atomic-operator-improvements", - "title": "MongoDB ODM: Atomic Operator Improvements", - "authorName": "jwage", - "authorEmail": "", - "contents": "Recently we've improved the support for use of atomic operators and how\nmuch it takes advantage of them in the Doctrine MongoDB ODM. Now when\nupdating embedded documents it will use dot annotation to `$set` the\nindividual properties instead of sending the entire document even if\nonly one property changes.\n\nHere is an example, first insert some new data:\n\n~~~~ {.sourceCode .php}\nsetStreet('6512 Mercomatic Ct');\n\n$user = new User();\n$user->setUsername('jwage');\n$user->setAddress($address);\n$user->addPhonenumber(new Phonenumber('6155139185'));\n\n$dm->persist($user);\n$dm->flush();\n~~~~\n\nNow if we make some changes and `flush()` again it will perform an\nupdate:\n\n~~~~ {.sourceCode .php}\ngetPhonenumbers();\n\n$address->setCity('Nashville');\n$phonenumbers[0]->setPhonenumber('booooo');\n\n$user->addPhonenumber(new Phonenumber('1234'));\n\n$dm->flush();\n~~~~\n\nThe above will result in the following queries, first it must run a\n`$set` to modify existing embedded documents:\n\n Array\n (\n [$set] => Array\n (\n [address.city] => Nashville\n [phonenumbers.0.phonenumber] => booooo\n )\n\n )\n\nThen it issues another update to `$pushAll` the new phonenumbers:\n\n Array\n (\n [$pushAll] => Array\n (\n [phonenumbers] => Array\n (\n [0] => Array\n (\n [phonenumber] => 1234\n )\n\n )\n\n )\n\n )\n", - "date": "2010-08-10 00:00:00" + "url": "/2020/04/10/doctrine-migrations-3.0.html", + "slug": "doctrine-migrations-3.0", + "title": "Released doctrine/migrations 3.0-alpha", + "authorName": "Asmir Mustafic", + "authorEmail": "goetas@gmail.com", + "contents": "[`doctrine/migrations` 3.0-alpha](https://github.com/doctrine/migrations) \n has been [published](https://github.com/doctrine/migrations/tree/3.0.0-alpha1) on the 29th March 2020. \n\nThe upcoming 3.0 new major release is the result of almost 6 months of work and brings\n a completely refactored/rewritten internal structure and some interesting new features. \n \n### Why a new major release?\n\nThe `doctrine/migrations` `v1.x` codebase is 10 years old, and in the past years a lot of features have been added on top of its\ninitial architecture. \n`doctrine/migrations` `2.0` was released a bit more than a year ago. This major release did a bit of cleanup, \nbut the general structure remained the same.\nIn this schema you can see the dependencies between classes in the latest `2.3.x` branch:\n\n\n\nToday I am happy to announce the first release candidate for the next\nmajor version of Doctrine, 0.11. The 0.11 version of Doctrine brings\nover 50 addressed tickets, a few new features, a few performance\nimprovements and lots of updates to the documentation/manual.\n\n
\n\n\u00a0\n\n
\n\nHere are the highlights:\n\n
\n\n- \\*Table.php classes are no longer generated by default when\n generating models from an existing database schema. This also means\n that ATTR\\_AUTOLOAD\\_TABLE\\_CLASSES now defaults to FALSE\n\n
\n\n> - Fixed some serious hydration bugs.\n\n
\n\n> - Improved the hydration performance for large (joined) result sets.\n\n
\n\n> - Application-level cascading deletes are back.\n\n
\n\n> We encourage everyone to test this release candidate thoroughly.\n> Please report any issues through trac.\n\n
\n\n> You can view the complete changelog for this release here.\n\n
\n\n\n", - "date": "2008-04-21 00:00:00" + "contents": "Looking for Developers\n======================\n\nWe've been on the hunt for more Doctrine contributors. As the number of\nusers of Doctrine grew we expected the number of commiters to rise with\nit but this has not been the case. We do get a lot of small patches here\nand there, but we are hoping for some of them to grow in to full-time\ncore developers that are involved with all the decisions made about\nDoctrine.\n\nCall to the community\n=====================\n\nYou can see Roman made a call to the Doctrine developers mailing list\n[here](http://groups.google.com/group/doctrine-dev/browse_thread/thread/c6e4c74e1a392909)\nabout the issue. We are taking all the feedback in to consideration and\nwe have started by creating a\n[contribute](https://www.doctrine-project.org/contribute) page that is\nlinked from the primary menu of the website. We hope that this will help\nwith new users finding information faster about how they can get started\ncontributing.\n\nOther Ideas\n===========\n\nIf you have any additional ideas about how we can promote contributing\nto Doctrine you can discuss them in the comments or on the [mailing list\nthread](http://groups.google.com/group/doctrine-dev/browse_thread/thread/c6e4c74e1a392909).\n", + "date": "2009-05-27 00:00:00" }, { - "url": "/2009/05/28/doctrine-database-abstraction-layer.html", - "slug": "doctrine-database-abstraction-layer", - "title": "Doctrine Database Abstraction Layer", - "authorName": "jwage", + "url": "/2010/12/21/doctrine2-released.html", + "slug": "doctrine2-released", + "title": "Doctrine 2 First Stable Release", + "authorName": "beberlei", "authorEmail": "", - "contents": "One of the greatest advantages to using Doctrine is what is under the\nhood that powers it. That is the database abstraction layer. This\npowerful layer is based off of a lot of different code from various\npopular PHP projects such as PEAR MDB2 and Zend\\_Db. It provides you a\nnice intuitive interface for retrieving information about your database\nschema as well as issuing DDL statements to change it.\n\nPublic Method Index\n===================\n\nThe database abstraction layer features the following methods in 1.x and\nsome new methods added in 2.0.\n\n1.x Methods\n-----------\n\n- listDatabases()\n- listFunctions()\n- listTriggers()\n- listSequences()\n- listTableConstraints()\n- listTableColumns()\n- listTableIndexes()\n- listTables()\n- listUsers()\n- listViews()\n- dropDatabase()\n- dropTable()\n- dropIndex()\n- dropConstraint()\n- dropForeignKey()\n- dropSequence()\n- createDatabase()\n- createTable()\n- createSequence()\n- createConstraint()\n- createIndex()\n- createForeignKey()\n- alterTable()\n\nNew Methods in 2.0\n------------------\n\n- renameTable()\n- addTableColumn()\n- removeTableColumn()\n- changeTableColumn()\n- renameTableColumn()\n- dropView()\n- createView()\n\nSome 2.0 Examples\n=================\n\nHere are some code examples using the Doctrine 2.0 Database Abstraction\nLayer. We'll show you how you can execute these examples yourself by\nchecking out Doctrine 2.0 from SVN and setting up a PHP script to test\nwith.\n\n> **TIP** The database abstraction layer can be used standalone so if\n> you just want a nice standard layer for communicating with your\n> database then Doctrine works for you too.\n\nCheckout Doctrine\n-----------------\n\n $ svn co http://svn.doctrine-project.org/trunk doctrine2\n $ cd doctrine2\n\nCreate Test Script\n------------------\n\nCreate a new PHP script anywhere on your server and name it `test.php`.\nNow lets initialize Doctrine so we can work with it. First we need to\nset our `ClassLoader`.\n\n~~~~ {.sourceCode .php}\nsetBasePath('Doctrine', __DIR__ . '/lib');\n~~~~\n\nCreate Connection\n-----------------\n\nNow we need to create our `Connection` instance.\n\n~~~~ {.sourceCode .php}\n 'pdo_mysql',\n 'dbname' => 'mysql',\n 'user' => 'root',\n 'password' => ''\n);\n$driver = new \\Doctrine\\DBAL\\Driver\\PDOMySql\\Driver;\n$conn = new \\Doctrine\\DBAL\\Connection($connectionOptions, $driver);\n\n**NOTE** Notice how we are temporarily connecting to the special\ndatabase for MySQL named ``mysql``. We'll use this database to\nconnect to so we can create our test database.\n~~~~\n\nNow we can simply retrieve the `SchemaManager` instance from the\n`Connection` driver and begin to execute some of the methods we listed\nabove.\n\n~~~~ {.sourceCode .php}\ngetSchemaManager();\n~~~~\n\nThe first thing we could do is create the database by calling the\n`createDatabase()` method on the `$sm` instance.\n\n~~~~ {.sourceCode .php}\ncreateDatabase('doctrine2test');\n~~~~\n\nNow that we have the database created, change your `$connectionOptions`\nkey `dbname` to specify `doctrine2test` so that we connect to the new\ndatabase that we just created.\n\n~~~~ {.sourceCode .php}\n 'pdo_mysql',\n 'dbname' => 'doctrine2test',\n 'user' => 'root',\n 'password' => ''\n);\n\n// ...\n~~~~\n\nNow we can begin adding things to the new database. For example we could\nissue a command to create a new table.\n\n~~~~ {.sourceCode .php}\n array(\n 'type' => \\Doctrine\\DBAL\\Type::getType('integer'),\n 'autoincrement' => true,\n 'primary' => true,\n 'notnull' => true\n ),\n 'test' => array(\n 'type' => \\Doctrine\\DBAL\\Type::getType('string'),\n 'length' => 255\n )\n);\n\n$options = array();\n\n$sm->createTable('new_table', $columns, $options);\n~~~~\n\nThen after creating the table I can later add a new column to it.\n\n~~~~ {.sourceCode .php}\n \\Doctrine\\DBAL\\Type::getType('string'),\n 'length' => 255\n);\n\n$sm->addTableColumn('new_table', 'new_column', $column);\n~~~~\n\nOr I could even drop the table completely.\n\n~~~~ {.sourceCode .php}\ndropTable('new_table');\n\n**NOTE** Not all of the above listed methods are supported by every\nsingle DBMS. If your DBMS does not support the functionality then\nDoctrine will throw exceptions accordingly.\n~~~~\n\nAll the above example are very simple schema changes but Doctrine is\ncapable of manipulating very complex schemas from a standardized\nprogrammatic interface. The Doctrine Migrations extension makes use of\nthis layer heavily to do all the operations for changing your database\nschemas.\n", - "date": "2009-05-28 00:00:00" + "contents": "We are happy to announce the immediate release of the first stable\nDoctrine 2.0 version. This release marks the end of 2.5 years of\ndedicated development starting in early 2008 and ending as a christmas\npresent to our users. We wish everyone a merry christmas!\n\nDuring the last years a core team of five people contributed large parts\nof the code and many developers contributed small patches and features.\nIn the end the Doctrine 1 code was refactored beyond recognition,\nreplacing the original ActiveRecord Doctrine 1 with a new DataMapper\nimplementation. We want to thank all the contributors and early adopters\nfor all the feedback and discussions.\n\nWhat is new in Doctrine 2?\n==========================\n\n- DQL is now a real language inside Doctrine, based on an EBNF that is\n parsed and transformed to SQL. Benefits of this refactoring are\n readable error messages, the generation of an AST that allows us to\n support many different vendors and powerful hooks for developers to\n modify and extend the DQL language to their needs. DQL can either be\n written as a string or be generated using a powerful QueryBuilder\n object.\n- Your persistent objects (called entities in Doctrine 2) are not\n required to extend an abstract base class anymore. Doctrine 2 allows\n you to use Plain old PHP Objects.\n- The UnitOfWork is not an alibi-pattern as implemented in Doctrine 1.\n It is the most central pattern in Doctrine 2. Instead of calling\n `save()` or `delete()` methods on your `Doctrine_Record` instances\n you now pass objects to the data mapper object called\n `EntityManager` and it keeps track of all changes until you request\n a synchronisation between database and the current objects in\n memory. This process is very efficient and has consistent semantics.\n This is a significant improvement over Doctrine 1 in terms of\n performance and developer ease-of-use.\n- There are no code-generation steps from YAML to PHP involved in the\n library anymore. YAML, XML, PHP and Doc-Block Annotations are four\n first-class citizens for defining the metadata mapping between\n objects and database. A powerful caching layer allows Doctrine 2 to\n use runtime metadata without relying on code-generation.\n- A clean architecture and powerful algorithms make Doctrine 2\n magnitudes faster than Doctrine 1.\n- Doctrine 2 supports an API that allows you to transform an arbitrary\n SQL statements into an object-structure. This feature is used by the\n Doctrine Query Language itself and is a first-class citizen of the\n library. It essentially allows you to make use of powerful\n vendor-specific features and complex SQL statements without having\n to cirumvent the ORM completely.\n- Inheritance is not akward anymore. There are now three different\n types of inheritance to choose from: Mapped Superclasses,\n Single-Table- and Joined-Table-Inheritance.\n- Many more features, just see the reference guide on what is possible\n with Doctrine 2.\n\nWhy did we take so long to develop this new major release?\n==========================================================\n\nThere are several reasons:\n\nThe refactoring of the original Doctrine 1 code marks a paradigm shift\nin how we approach object persistence in PHP. Making use of PHP 5.3 only\nfeatures we could write an ORM whose internals are much more powerful\nthan the first version of Doctrine. This meant rewriting lots of\nfeatures from scratch and refactoring other code beyond recognition.\nMany features were carefully implemented and have been discussed for\nweeks or month in our team. We feel that not a single feature in this\nrelease can be called a hack or has negative architectural implications\nalong the road.\n\nAs a user an ORM means committing yourself to a library that you haven't\nwritten yourself and trust it to handle your most important code: The\nbusiness and domain logic. We wanted to release a high quality library\nand make sure it has no bugs when it is released. This explains why the\nfirst alpha was already released over a year ago and we have been fixing\nevery little bug that appeared for the last 14 months. When you download\nDoctrine 2 now we feel this code is more stable and much more\nmaintainable than Doctrine 1. The ORM itself has about 1000 tests where\nhalf of these are functional tests that successfully run against all the\nsupported database vendors MySQL, SQLite, PostgreSQL, Oracle and MSSQL.\nThe database access layer and common libraries come with an additional\n400 tests.\n\nWe wanted the release to ship with a complete and well-thought-out\ndocumentation. Writing such a documentation takes time. The current\ndocumentation is probably not perfect, but it contains a very detailed\nreference guide and a small tutorial to get started. Additionally there\nis a cookbook with several recipes that you can use with your Doctrine 2\nproject.\n\nWhile Doctrine 1 had pretty powerful SQL abstraction we felt there were\nbetter libraries out there that could be incoporated into Doctrine 2.\nThe new database abstraction layer of Doctrine 2 is much more powerful\nthan the Doctrine 1 DBAL and is powered by code from other great\nlibraries such as Zeta Components, Zend Framework and PEAR MDB2. On top\nof this it can also be used standalone, you can use the DBAL without\nhaving to use the ORM.\n\nDropping Features of Doctrine 1\n===============================\n\nBut Doctrine 2 is not only a new version of Doctrine 1. We also dropped\na lot of features that we find inappropriate for the core of an ORM\nlibrary:\n\n- Validators have been dropped. Use a framework library like Zend or\n Symfony for validator support, they ship much more powerful\n validators than Doctrine 1 ever had. If you don't like frameworks\n there is ext/filter to consider.\n- We killed the magic features: Doctrine 2 does not offer behaviors as\n a core feature anymore. We came to the conclusion that behaviors in\n the core lead to the big ball of mud called Doctrine\n 1. The code is nearly unmaintainable because of all the special\n logic and magic that works everywhere. That is why Doctrine 2\n focuses on being a consistent and extensible object-relational\n mapper only and behaviors should be released as extensions on top of\n Doctrine 2. While this approach was questioned by many of the\n Doctrine 1 users we think this is the right approach. We are already\n seeing third party libraries and extensions like Doctrator based on\n Doctrine 2 that implement these features.\n- Explicit multiple connection support has been dropped. Use multiple\n instances of `Doctrine\\DBAL\\Connection` or\n `Doctrine\\ORM\\EntityManager`. Doctrine 2 uses no global state that\n could affect the usage of multiple instances.\n\nIs Doctrine 2 backwards compatible?\n===================================\n\nNo it is not. Doctrine 1 and 2 have nothing in common. For what its\nworth they only share the same project name. You cannot simply move from\nyour Doctrine 1.2 to a Doctrine 2 project. Why didn't we release a\nbackwards compatible ORM? Because we think Doctrine 1 has architectural\nflaws that cannot be fixed.\n\nWhat is the plan for Doctrine 2 beyond this release?\n====================================================\n\nWith the core that is now Doctrine 2 we plan to keep the library\nbackwards compatible at all times. Not only for minor and mini-releases\nsuch as 2.0.1 or 2.1, even for potential releases of a Doctrine 3 or 4\nversion we plan to avoid public API refactorings as much as possible. If\nhowever we feel that there is overwhelming evidence that a public API\nrefactoring makes the ORM faster and leads to more maintainable code we\nwill not hesitate to break API for a 3.0 release.\n\nThis approach comes at costs that we are willing to pay. All new\nfeatures have to pass a requirements discussion and pros/cons are\ncarefully weighted against each other. That is also why we try to expose\nas little of our internals as possible. This certainly hurts\nextensibility of Doctrine 2, but with our expected quality level and\nreview process we hope to bring the costs of this approach down. You\nshould never be forced to extend Doctrine 2 just to fix bugs, which is\nthe most important reason for extensibility in other PHP libraries.\n\nWhere do I start?\n=================\n\nYou can download Doctrine 2 [from our downloads\nsection](https://www.doctrine-project.org/projects/orm/download) ,\n[install it via PEAR](http://pear.doctrine-project.org/) or find it in\nthe [Github repository](https://github.com/doctrine/orm). Symfony 2\nalso ships with a current version of Doctrine 2. After you installed\nDoctrine 2 you can [go to the\ndocumentation](https://www.doctrine-project.org/docs/orm/2.0/en/) and\nstart reading the reference guide or [the\ntutorial](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/getting-started-xml-edition.html).\n\nIf you find any bugs or have feature requests you should check our\n[Bug-Tracker and report bugs or feature\nrequests](https://www.doctrine-project.org/jira). If you want to discuss\nabout Doctrine 2 you can either [use the Google Group or join the\n\\#doctrine channel on the Freenode IRC\nNetwork](https://www.doctrine-project.org/community). Also make sure to\ncheck the current [Limitations and Known Issues\nsection](https://www.doctrine-project.org/docs/orm/2.0/en/reference/limitations-and-known-issues.html)\nin the docs. We are trying to be honest about what Doctrine 2 can and\ncan't do but might do in the future.\n", + "date": "2010-12-21 00:00:00" }, { - "url": "/2008/01/25/a-few-updates-for-2008.html", - "slug": "a-few-updates-for-2008", - "title": "A few updates for 2008", + "url": "/2009/01/05/doctrine-1-0-6-released.html", + "slug": "doctrine-1-0-6-released", + "title": "Doctrine 1.0.6 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Some of these announcements are a little late but I think they deserve a\nproper announcement.\n\nFirst, we have setup a way for you to give us all your money :) Please\nfeel free to give a little. The purpose of the Doctrine donation\ncollection is simple. The creators of Doctrine don't work on this great\nproduct for any money. The contributions are made out of the pure\nenjoyment of working on a great open source project such as Doctrine. It\nis not totally clear what *exactly* the donations will be used for now,\nbut in the future they may be used to fund infrastructure expenses\nrequired by the project, sending developers to conferences, marketing,\nor even split amongst the developers of Doctrine. So if you or your\ncompany uses Doctrine and are happy with it, a donation to further the\nproject would be much appreciated.\n\nSecondly, we have made some updates to the website. Specifically the\nDownload page. It now has proper links to packages and svn for each\nrelease of Doctrine. These packages are generated nightly from the\nsource in svn.\n\nFinally, as some of you all may already know, we have finally gotten our\nrelease/package management under control and you can expect stability in\nthe area of releases, branches and BC breaks!\n", - "date": "2008-01-25 00:00:00" + "contents": "Welcome Back\n============\n\nDon't worry! Doctrine is alive :) It has been a bit quiet around here\ndue to the holidays. I was able to take a week long vacation and it was\nvery nice being away from everything for the first time in almost three\nyears. I hope everyone enjoyed the holidays as much as I did.\n\n1.0.6 Released\n==============\n\nAnyways, on my first day back I am happy to introduce the freshly\npackaged Doctrine 1.0.6 bug fix release. This release contains dozens of\nfixes and the change log can be read\n[here](https://www.doctrine-project.org/change_log/1_0_6). It is strongly\nencouraged that you upgrade as soon as possible.\n\nDoctrine 1.1\n============\n\nOn a side note, we will be releasing the 2nd beta of 1.1 later this week\nand we have a few other surprises that will be a part of the 1.1 stable\nrelease. So, you will have to stick around to see what we have planned.\nYou can check out what is new in 1.1 by reading the\n[upgrade](https://www.doctrine-project.org/upgrade/1_1) file.\n", + "date": "2009-01-05 00:00:00" }, { - "url": "/2016/07/27/doctrine-mongodb-odm-release-1.1.1.html", - "slug": "doctrine-mongodb-odm-release-1.1.1", - "title": "Doctrine MongoDB ODM release 1.1.1 ", - "authorName": "Maciej Malarz", - "authorEmail": "malarzm@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.1.1](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.1).\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.1.md#111-2016-07-27).\nA full list of issues and pull requests included in this release may be\nfound in the [1.1.1\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.1.1).\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.1.1\"\n }\n}\n```\n\nFuture Releases\n===============\n\nWork on the much anticipated 2.0 version of MongoDB ODM with support for\nthe new MongoDB driver is beginning; however we are unable to set a\nrelease date yet. Development will likely take some time and thus we\nhave scheduled a 1.2 version to be released before 2.0. Version 1.2 will\ninclude all features planned for 2.0 that can be introduced in a\nbackward compatible way as well as new deprecation notices for\nfunctionality we plan to remove in 2.0, which we hope will ease future\nmigration.\n\nDoctrine MongoDB ODM release 1.0.7\n==================================\n\nWe are also happy to announce the immediate availability of Doctrine\nMongoDB ODM\n[1.0.7](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.7).\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#107-2016-07-27).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.7\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.7).\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0.7\"\n }\n}\n```\n", - "date": "2016-07-27 00:00:00" + "url": "/2009/10/21/doctrine-1-2-alpha3-released.html", + "slug": "doctrine-1-2-alpha3-released", + "title": "Doctrine 1.2 ALPHA3 Released", + "authorName": "jwage", + "authorEmail": "", + "contents": "Today I am happy to bring you hopefully the last alpha release for\nDoctrine 1.2. We decided to have one more alpha due to some interesting\nissues and improvements brought to our attention related to PEAR\nmodel/file naming standards, result set caching improvements and a few\nother things. You can of course check out what all is new in Doctrine in\nthe [upgrade](https://www.doctrine-project.org/upgrade/1_2) file. Below\nare some quick links to some of the most recent changes.\n\n- [PEAR Style Model Loading and\n Generation](https://www.doctrine-project.org/upgrade/1_2#PEAR%20Style%20Model%20Loading%20and%20Generation)\n- [Ordering\n Relationships](https://www.doctrine-project.org/upgrade/1_2#Ordering%20Relationships)\n- [Result Cache\n Improvements](https://www.doctrine-project.org/upgrade/1_2#Result%20Cache%20Improvements)\n\nGo ahead and [download](https://www.doctrine-project.org/download)\nDoctrine 1.2 ALPHA3 and give it a try. Let us know if you have any\nissues by raising a new issue in\n[JIRA](https://www.doctrine-project.org/jira).\n", + "date": "2009-10-21 00:00:00" }, { - "url": "/2012/01/22/dbal-orm-22rc1.html", - "slug": "dbal-orm-22rc1", - "title": "DBAL and ORM 2.2 Release candidates", - "authorName": "Benjamin Eberlei", + "url": "/2012/03/04/doctrine-2-2-1-released.html", + "slug": "doctrine-2-2-1-released", + "title": "Doctrine 2.2.1 released", + "authorName": "beberlei", "authorEmail": "", - "contents": "Again with a slight delay we finalized the DBAL and ORM release\ncandidates for the 2.2 branch. There have been some late changes that\nmade the delay necessary:\n\n- DBAL Schema supported was heavily refactored to include the concept\n of \"namespaces\". This abstracts multi-database useage for MySQL and\n Schema support for PostgreSQL.\n- A Paginator was put into the DoctrineORMToolsPagination namespace.\n Its the combination of the original DoctrineExtensions Paginator\n with extensions done in the KnpLabs components and the Pagerfanta\n library.\n\nAs usual you can grab the code from:\n\n- [Packagist](https://packagist.org/packages/doctrine/)\n- [PEAR](http://pear.doctrine-project.org)\n- [Downloads](https://www.doctrine-project.org/projects)\n- [Github](https://github.com/doctrine)\n\nPlease test this code with your applications. If no bugs or\nbackwards-compatible breaks are reported in the next days we will\nrelease the final version on friday.\n", - "date": "2012-01-22 00:00:00" + "contents": "We released version 2.2.1 of the Doctrine ORM today, fixing a total of\n16 bugs.\n\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10194)\n\nYou can install the release through\n[Github](https://github.com/doctrine/orm) ,\n[PEAR](http://pear.doctrine-project.org) , download from the website or\nthrough [Composer](https://packagist.org):\n\n> {\n> : \"require\": { \"doctrine/orm\": \"2.2.1\" }\n>\n> }\n", + "date": "2012-03-04 00:00:00" }, { - "url": "/2015/12/15/doctrine-mongodb-odm-release-1.0.4.html", - "slug": "doctrine-mongodb-odm-release-1.0.4", - "title": "Doctrine MongoDB ODM release 1.0.4", - "authorName": "Andreas Braun", - "authorEmail": "alcaeus@alcaeus.org", - "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.0.4](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.4).\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#104-2015-12-15).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.4\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.4).\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0.4\"\n }\n}\n```\n\nDoctrine MongoDB ODM 1.1 requires PHP 5.5+\n==========================================\n\nThe current `master` branch saw its PHP requirement bumped to 5.5\nrecently. If you are still using the master version in your project you\nshould switch to a stable release as soon as possible:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0\"\n }\n}\n```\n\nThis will ensure you are using stable versions and will use 1.1 as soon\nas it's released.\n\nThe upcoming releases of Doctrine MongoDB (1.3) and ODM (1.1) will also\ndrop support for all MongoDB driver versions before 1.5. If you are\nstill using an older driver, please consider upgrading it in order to\nreceive future updates.\n", - "date": "2015-12-15 00:00:00" - }, - { - "url": "/2012/01/29/doctrine-2-2-final.html", - "slug": "doctrine-2-2-final", - "title": "Doctrine 2.2 released", - "authorName": "Benjamin Eberlei", + "url": "/2010/02/17/doctrine2-behaviours-nutshell.html", + "slug": "doctrine2-behaviours-nutshell", + "title": "Doctrine 2 \"Behaviours\" in a Nutshell", + "authorName": "beberlei", "authorEmail": "", - "contents": "We released Doctrine 2.2 today.\n\nA top list of the new features includes:\n\n- Filtering entities and associations based on rules that can be\n parameterized, enabled or disabled, developed by asm89\n- Support for complex SQL types such as Geometries, IPs, develped by\n jsor.\n- Bit Comparisions in DQL, developed by Fabio.\n- Annotation Refactorings by Fabio and johannes.\n- DQL Refactoring, ORDER BY and GROUP BY supporting result variables\n of SELECT expressions.\n- Alias for entities in DQL results.\n- Result Cache refactoring\n- Flush for single entities\n- Master/Slave Connection in DBAL\n\nSee the changelogs of all three projects Common, DBAL, ORM:\n\n- [ORM](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10157)\n- [DBAL](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10142)\n- [Common](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10152)\n\nSee the\n[UPGRADE\\_2\\_2](https://github.com/doctrine/orm/blob/master/UPGRADE.md#upgrade-to-22)\nfile to see backwards incompatible changes.\n\nYou can install the release through\n[Github](https://github.com/doctrine/orm) ,\n[PEAR](http://pear.doctrine-project.org) or through\n[Composer](https://packagist.org):\n\n> {\n> : \"require\": { \"doctrine/orm\": \"2.2.0\" }\n>\n> }\n", - "date": "2012-01-29 00:00:00" + "contents": "**NOTE** This blog entry relates to an outdated Doctrine 2 Alpha\n: version. Please see the documentation for the most up to date\n behavior.\n\nOne of the most common fallacies out there about Doctrine 2 abandoning\nBehaviours is that developers now have to implement fancy logic to\nre-implement them yourself. Doctrine 2's approach to completly separate\nORM from your domain classes allows to build behaviours in a very clean,\nunobstrusive and simple object-oriented way. This article shows you how\nto implement some of the Doctrine 1 behaviours in your Doctrine 2 code.\nFor this I will rewrite the Doctrine 1.x manuals examples for each\nBehaviour.\n\nThis example uses Annotations as example, yet this of course works with\nYAML and XML mappings. Additionally Doctrine 2 allows constructors to\nhave required arguments as of a commit of the last week. This allows for\nsome pretty slick enforcements in user-land code as you will see in this\npost.\n\nStraightforward combination of \"Behaviours\"\n===========================================\n\nAll the code listed below is somehwat more verbose than the Doctrine 1\ncode, however much more bound to the domain of your model and very\nstraightforward. There is no magic involved and you will fully\nunderstand what will be happening in each of the behaviours. The best of\nall, although not a simple trick, you will be able to combine ALL\nbehaviours in one model class and still be completly on top of their\ninner workings.\n\nTimestampable\n=============\n\nTimestampable is a behaviour that requires you to hook into the\npre-update event which is called whenever an entity is updated:\n\n~~~~ {.sourceCode .php}\ncreated = $this->updated = new DateTime(\"now\");\n }\n\n /**\n * @PreUpdate\n */\n public function updated()\n {\n $this->updated = new DateTime(\"now\");\n }\n}\n~~~~\n\nSluggable\n=========\n\nThe sluggable behaviour is trivial to implement in Doctrine 2:\n\n~~~~ {.sourceCode .php}\nslug == null) {\n $this->slug = MyStringHelper::slugize($title);\n }\n $this->title = $title;\n }\n\n /**\n * Put this method in if your slug should be \"editable\"\n */\n public function setSlug($slug)\n {\n $this->slug = $slug;\n }\n}\n~~~~\n\nSee how its much more explicit in your code how and why the slug is\ngenerated.\n\nNestedSet\n=========\n\nThis is one of the more complex behaviours in Doctrine 1 and it won't be\nnecessarily more easy in Doctrine 2. However as this is an important\nfeature we will provide an implementation as a `DoctrineExtensions`\nnamespaced package that will be maintained by Doctrine Devs.\n\nSearchable\n==========\n\nThere is currently no plan to port the Searchable behaviour to Doctrine\n2, but the possibility to instantiate objects using *new* allows a very\nsimple integration of a Doctrine 2 model with Apache Solr or Lucene with\na little wrapper that re-creates detached instances from this powerful\nsearch engines.\n\nFor example using\n[ezcSearch](http://ezcomponents.org/docs/api/trunk/introduction_Search.html)\nwe can make our BlogPost accessible for Solr:\n\n~~~~ {.sourceCode .php}\n $this->id,\n 'title' => $this->title,\n 'body' => $this->body,\n 'slug' => $this->slug,\n );\n }\n\n public function setState($state)\n {\n foreach ($state AS $k => $v) {\n $this->$k = $v;\n }\n }\n\n static public function getDefinition()\n {\n // define search schema\n return $def;\n }\n}\n~~~~\n\nezcSearch can then index a blog post whenever it is changed by hooking\nan EventListener into the Doctrine `PreUpdate` Event:\n\n~~~~ {.sourceCode .php}\n_searchSession = $searchSession;\n }\n\n public function preUpdate(LifecycleEventArgs $args)\n {\n if ($args->getEntity() instanceof ezcBasePersistable) {\n $this->_searchSession->index($args->getEntity());\n }\n }\n}\n~~~~\n\nYou can now hook this event into Doctrine's EntityManager:\n\n~~~~ {.sourceCode .php}\ngetEventManager()->addEventListener(\n array(Doctrine\\ORM\\Events::preUpdate), $searchListener\n);\n~~~~\n\nNow when you search for your entities you get returned `BlogPost`\ninstances from ezcSearchs Solr interface:\n\n~~~~ {.sourceCode .php}\ncreateFindQuery( 'BlogPost' );\n$searchWord = 'test';\n\n// where either body or title contains thr $searchWord\n$q->where(\n $q->lOr(\n $q->eq( 'body', $searchWord ),\n $q->eq( 'title', $searchWord )\n )\n);\n$searchedBlogPosts = $session->find( $q );\n~~~~\n\nThese instances are detached from the EntityManager when they get\nreturned from ezcSearch and can be merged back into the persistence\ncontext:\n\n~~~~ {.sourceCode .php}\nsetTitle(\"ChangeFoo\");\n$em->merge($searchedBlogPosts[0]);\n~~~~\n\nRead about Merging, Detached instances and other cool stuff of Doctrines\nobject model in the [Working with\nObjects](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/working-with-objects.html#merging-entities)\nchapter of the manual.\n\nVersionable\n===========\n\nBy default Doctrine 2 comes with a way to set a *version* column that is\nautomatically incremented on each update. Using the event system it is\neasy to use this information to implement a versionable audit-log\nbehaviour. The required code is more verbose than the simple\nconfiguration of Doctrine 1, however there is much less magic involved\nand you can implement this behaviour in a way that is trivial to\nunderstand for someone new looking at your code:\n\n~~~~ {.sourceCode .php}\nauditLog[] = new BlogPostVersion($this);\n }\n // getters\n}\n\n/**\n * @Entity\n */\nclass BlogPostVersion\n{\n /**\n * @Id\n * @Column(type=\"integer\")\n * @generatedValue(strategy=\"AUTO\")\n */\n private $id;\n\n /**\n * @Column(type=\"string\")\n */\n private $title;\n\n /**\n * @Column(type=\"text\")\n */\n private $body;\n\n /**\n * @Column(type=\"integer\")\n */\n private $version;\n\n /**\n * @ManyToOne(targetEntity=\"BlogPost\")\n */\n private $post;\n\n public function __construct(BlogPost $post)\n {\n $this->post = $post;\n $this->title = $post->getTitle();\n $this->body = $post->getBody();\n $this->version = $post->getCurrentVersion();\n }\n}\n~~~~\n\nI18N\n====\n\nMulti-Language content is an important topic and can be implemented in\nDoctrine 2, since its just a fancy name for a One-To-Many relation.\nHowever currently Doctrine 2 does not allow to persist keys by name,\nwhich makes a OneToMany implementation a bit more intensive then it\ncould be. We plan to implement primitive value collections however which\nwould simplify any attempt to implement nested structured content, that\nis not an entity by itself.\n\nSoft Delete\n===========\n\nWe won't support soft-delete at all. If you want to implement a\nsoft-delete alike behaviour its probably a good idea to look into the\nState pattern instead.\n\nBlameable\n=========\n\nImplementing this behaviour is just a matter of adding two fields\n*createdByUserId* and *modifiedByUserId* fields and setting them\nwhenever one of your relevant fields change by hooking into setter\nmethods:\n\n~~~~ {.sourceCode .php}\ntitle = $title;\n $this->modifiedByUserId = $user->getId();\n }\n}\n~~~~\n\nSortable\n========\n\nSame as I18N, we are planning to support persistence of collection keys\nin the Doctrine 2 Core. This would allow to sort collections by using\nthe possibilities of the `Doctrine\\Common\\Collections\\Collection`\ninterface.\n\nConclusion\n==========\n\nAlthough slightly more complex than Doctrine 1s simple configuration\noptions, most \"behaviours\" are still way easy to implement in Doctrine\n2. The additional benefit of this straightforward approach: *You can\ncombine behaviours in any way, inside your domain model, without having\nto wonder how the magic works together, you are completly on top of it.*\n", + "date": "2010-02-17 00:00:00" }, { - "url": "/2008/07/01/introducing-the-doctrine-forum.html", - "slug": "introducing-the-doctrine-forum", - "title": "Introducing the Doctrine Forum", + "url": "/2009/11/11/doctrine-2-0-0-alpha3-released.html", + "slug": "doctrine-2-0-0-alpha3-released", + "title": "Doctrine 2.0.0-ALPHA3 Released", "authorName": "jwage", "authorEmail": "", - "contents": "For those of you who are not keen on using the mailing list or irc for\ngetting help with Doctrine, we now have a public Forum, powered by\nPHPBB3(which is very nice btw). Please contact me at jonwage at\ngmail.com if you would like a forum for your language added or if you\nare interested in being a moderator.\n", - "date": "2008-07-01 00:00:00" + "contents": "Today I am happy to bring you the third alpha version of Doctrine 2!\nThis release contains over 60 fixes and the code is starting to\nstabilize.\n\nHighlights\n==========\n\n- [r6441] Added functionality to convert a Doctrine 1 schema to\n Doctrine 2 to help users with upgrading.\n- [r6442] Work on mapping drivers, exporter drivers and reverse\n engineering of database schemas.\n- [r6551] Refactorings to reduce duplicated code and increase\n efficiency.\n- [r6554] Refactored cache drivers to allow more control over\n deleting, added namespacing to cache drivers and implemented\n clear-cache task.\n\nView the complete [change\nlog](https://www.doctrine-project.org/change_log/2_0_0_ALPHA3) to see a\ndetailed list of every change contained in this release. You can\n[download](https://www.doctrine-project.org/download#2_0) this release\nand report any issues you find in\n[Jira](https://www.doctrine-project.org/jira).\n\nWhat is Next?\n=============\n\nWe will have one more alpha release on December 11th, 2009 and our first\nbeta on January 8th, 2010. The schedule after that has not yet been\ndetermined.\n", + "date": "2009-11-11 00:00:00" }, { - "url": "/2008/09/18/doctrine-and-symfony-frameworks-collaborating.html", - "slug": "doctrine-and-symfony-frameworks-collaborating", - "title": "Doctrine and symfony frameworks collaborating", + "url": "/2010/03/29/doctrine-1-2-2-released.html", + "slug": "doctrine-1-2-2-released", + "title": "Doctrine 1.2.2 Released", "authorName": "jwage", "authorEmail": "", - "contents": "\n\nDoctrine has been used by many symfony developers for nearly two years\nas an externally maintained plugin. This week it became official and\nDoctrine will be bundled and supported by the symfony core team as of\nversion 1.2 which is slated for late Q4 2008. You can read the full blog\narticle on the symfony-project.org blog.\n\n
\n\n\n", - "date": "2008-09-18 00:00:00" + "contents": "Today I am happy to bring you the second maintenance release for the 1.2\nversion of Doctrine. This release contains around 100 fixed issues from\n[Jira](https://www.doctrine-project.org/jira/browse/DC/fixforversion/10047).\nWe will continue regularly creating maintenance releases for the\nDoctrine 1.2 version so if you have any problems, please create a issue\non Jira, include a patch with tests and we'll try and include it in the\nnext version.\n\nAs always you can find information about this new version on the\n[download](https://www.doctrine-project.org/download) page.\n", + "date": "2010-03-29 00:00:00" }, { - "url": "/2008/07/25/who-is-behind-doctrine.html", - "slug": "who-is-behind-doctrine", - "title": "Who is behind Doctrine?", - "authorName": "jwage", + "url": "/2009/11/18/php-benchmarking-mythbusters.html", + "slug": "php-benchmarking-mythbusters", + "title": "PHP Benchmarking Mythbusters", + "authorName": "romanb", "authorEmail": "", - "contents": "Today I have updated the about page on the website so you can get a\nglimpse of who is behind the Doctrine project. Each core contributor\ncontains a brief description of themselves and the role they play in the\nproject. Comments are allowed on each contributors profile so please\nfeel free to express your thanks to them there. Follow the doctrine!\n", - "date": "2008-07-25 00:00:00" + "contents": "First of, this blog post sucks. I thought I would never write such a\nsenseless apples and oranges comparison with artificial and meaningless\nbenchmarks, but I was just a bit astonished by the results that I would\nlike to share.\n\nI use object-relational mapping tools in many different languages, from\nJava to C\\# to PHP. One of the many supposedly lightweight alternatives\nin PHP to Doctrine is Outlet. After stumbling upon this comment on a\n[stackoverflow.com\npost](http://stackoverflow.com/questions/185358/simple-php-orm):\n**\"Gotta second Outlet. Doctrine is comically bloated - it is WAY too\nbig to be a sensible choice for anything but the lightest of server\nloads.\"** I thought I take a look at Outlet. This ORM seems to consist\nof only 9 classes! It can't get any more lightweight right? I assumed it\nwould blow Doctrine out of the water performance-wise in all situations.\n\nSo I downloaded Outlet 0.7 and created a simple test database with just\n1 table. Then I wrote a small script that bootstraps Outlet, inserts 500\nobjects into the database and reads them out afterwards (Yes, it's\nstupid, just like most other artificial benchmarks).\n\nEnvironment is PHP 5.3.0 with APC.\n\n~~~~ {.sourceCode .php}\n array(\n 'dsn' => 'mysql:host=localhost;dbname=outletbenchmark',\n 'username' => $mysqlUsername,\n 'password' => $mysqlPassword,\n 'dialect' => 'mysql'\n ),\n 'classes' => array(\n 'Bug' => array(\n 'table' => 'bugs',\n 'props' => array(\n 'ID' => array('ID', 'int', array('pk' => true, 'autoIncrement' => true)),\n 'Title' => array('Title', 'varchar'),\n 'Description' => array('Description', 'varchar')\n )\n )\n )\n);\nOutlet::init($config);\n$outlet = Outlet::getInstance();\n$outlet->createProxies();\n\n$s = microtime(true);\n$outlet->getConnection()->beginTransaction();\nfor ($i = 0; $i < 500; ++$i) {\n $bug = new Bug;\n $bug->Title = 'This is a test bug';\n $bug->Description = 'Hey there!';\n\n $outlet->save($bug);\n}\n$outlet->getConnection()->commit();\n\n$e = microtime(true);\necho \"\\nInsert:\" . ($e - $s) . \"\\n\";\n\n$outlet->clearCache();\n\n$s = microtime(true);\n$bugs = $outlet->select('Bug');\n$e = microtime(true);\n\n$outlet->clearCache();\n\necho \"\\nQuery:\" . ($e - $s) . \"\\n\";\n\necho \"\\n\" . (memory_get_usage() / 1024) . ' KB ' . PHP_EOL;\n\n**CAUTION** First off, ini\\_set('error\\_reporting', E\\_ALL); was\nnecessary to silence the following E\\_STRICT warnings coming from\nOutlet:\n\n::\n\n Strict Standards: Non-static method OutletMapper::get() should not be called statically,\n assuming $this from incompatible context in /Users/robo/dev/php/outlet/outlet-0.7/classes\n /outlet/Outlet.php on line 184\n\n Strict Standards: Only variables should be passed by reference in /Users/robo/dev\n /php/outlet/outlet-0.7/classes/outlet/OutletMapper.php on line 546\n\nDoes not really look good (and does not speak for Outlet very\nwell), but anyway.\n~~~~\n\nI did the same for Doctrine 2.0, *without setting up a metadata or query\ncache*.\n\n~~~~ {.sourceCode .php}\nsetBasePath(__DIR__ . '/doctrine');\n$classLoader->register();\n\n$config = new \\Doctrine\\ORM\\Configuration;\n\n$config->setProxyDir(__DIR__ . '/Proxies');\n$config->setProxyNamespace('Proxies');\n$connectionOptions = array(\n 'driver' => 'pdo_mysql',\n 'user' => $mysqlUsername,\n 'password' => $mysqlPassword,\n 'host' => 'localhost',\n 'dbname' => 'doctrine2benchmark'\n);\n\n$em = \\Doctrine\\ORM\\EntityManager::create($connectionOptions, $config);\n\n$s = microtime(true);\nfor ($i = 0; $i < 500; ++$i) {\n $bug = new Bug;\n $bug->Title = 'BBug';\n $bug->Description = 'Hello there!';\n\n $em->persist($bug);\n}\n$em->flush();\n\n$e = microtime(true);\necho \"\\nInsert:\" . ($e - $s) . \"\\n\";\n\n$em->clear();\n\n$s = microtime(true);\n$bugs = $em->getRepository('Bug')->findAll();\n$e = microtime(true);\n\n$em->clear();\n\necho \"\\nQuery:\" . ($e - $s) . \"\\n\";\n\necho \"\\n\" . (memory_get_usage() / 1024) . ' KB ' . PHP_EOL;\n~~~~\n\nHere are my results.\n\n1st Run\n=======\n\n| Measurement | | Outlet | | Doctrine | | ------------ | |\n----------------- | | ------------------- | | Insert Time | |\n0.23142600059509 | | 0.11601996421814 | | Query Time | |\n0.070523977279663 | | 0.025638818740845 | | Used Memory | | 644.5546875\nKB | | 1061.83203125 KB |\n\nNo, I did not swap the numbers, I promise. You see that the D2 version\nuses about 400KB more memory but the result of the timings are quite\nsurprising. Being curious I ran both scripts several times which means\nthe query section has to hydrate 500 objects more for each run.\n\n2nd Run\n=======\n\n**1st refresh (1000 objects)**\n\n| Measurement | | Outlet | | Doctrine | | ------------ | |\n----------------- | | ------------------- | | Insert Time | |\n0.26595592498779 | | 0.11661005020142 | | Query Time | |\n0.14437794685364 | | 0.052286863327026 | | Used Memory | | 875.0703125\nKB | | 1313.15625 KB |\n\n3rd Run\n=======\n\n**2nd refresh (1500 objects)**\n\n| Measurement | | Outlet | | Doctrine | | ------------ | |\n----------------- | | ------------------- | | Insert Time | |\n0.2314441204071 | | 0.11621117591858 | | Query Time | | 0.21359491348267\n| | 0.079329013824463 | | Used Memory | | 1139.5859375 KB | | 1541.59375\nKB |\n\nDid you expect these results? After all Doctrine is so bloated, right?\n(Doctrine 2 full package \\~250 classes) and Outlet is so lightweight\n(\\~9 classes)?\n\nBottom line:\n\n- The number of classes barely means anything. (Its probably a good\n criterion if you're short on disk space).\n- \"Lightweight\" is a buzzword and meaningless without a reference\n point.\n- Don't judge a library by its size and certainly dont try to draw\n conclusions from the size to the performance, or worse to the\n scalability. It just doesnt work.\n- *Artificial benchmarks suck.*\n- To all the folks hunting for everything lightweight and\n micro-benchmarking all day long: You're wasting your time (Just like\n I did with this stupid benchmark...).\n- Don't trust artificial benchmarks (Not even this one).\n\nPS: This is no post against Outlet, so if any Outlet guys or fans are\nreading this, please don't feel offended. Since I dont know Outlet well\nI'm sure I did a lot of things wrong but thats really not important\nhere. I am just making a stance against all the ridiculously stupid\nartificial benchmarks out there that try to make people believe Doctrine\nis slow and bloated. This post shows I can make it look the other way\naround easily. That just shows how meaningless these comparisons are.\n\n> **NOTE** All the code used to run these benchmarks can be downloaded\n> from\n> [here](https://www.doctrine-project.org/downloads/doctrine2outletbenchmark.zip).\n> It is a zip archive containing all the code you need to run the\n> benchmarks yourself.\n", + "date": "2009-11-18 00:00:00" }, { - "url": "/2009/05/29/doctrine-lazy-loading.html", - "slug": "doctrine-lazy-loading", - "title": "Doctrine Lazy Loading", + "url": "/2009/06/15/sensio-labs-training-sessions.html", + "slug": "sensio-labs-training-sessions", + "title": "Sensio Labs Training Sessions", "authorName": "jwage", "authorEmail": "", - "contents": "Did you know?\n=============\n\nDid you know that in Doctrine if you don't specifically select a\nproperty or join a relationship in your DQL query, you can lazily load\nthat data? Here is a simple example to demonstrate.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->select('u.id, u.username')\n ->where('u.username = ?', 'jwage');\n\n$user = $q->fetchOne();\n~~~~\n\nNotice how I only selected the `id` and `username`, but we have an\nadditional column named `email_address`. If I were to access that\nproperty it would lazily load the data.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->where('u.username = ?', 'jwage');\n\n$user = $q->fetchOne();\n~~~~\n\nBut then I wanted to retrieve the `Profile` for that `User` I could do\nso by simply accessing the `Profile` property on `User`.\n\n~~~~ {.sourceCode .php}\nProfile;\n~~~~\n\nThe above code would result in an additional query to the database that\nloads the `Profile` record for the `User` in question. Now if I were to\nbe rendering a list of twenty `User` objects and I lazily load the\nprofile of each user that means I would have 21 queries total! That is\ntoo many! In that case it would be smart to `leftJoin()` the `Profile`\nobject like the following.\n\n~~~~ {.sourceCode .php}\ncreateQuery('u')\n ->leftJoin('u.Profile p');\n\n$users = $q->execute();\n~~~~\n\nNow when I access the `Profile` relationship of an individual object the\ndata would already be present and no lazy loading would be required.\n\nWhy?\n====\n\nI made this blog post because I noticed this feature being abused and\noverly used just because it makes things easier. The goal is to make you\naware of what is happening so that you can effectively use lazy loading\nand not end up having applications with very high query counts per page.\n\nI've seen this many times and the blame is often put on Doctrine but\nreally it is the tool not being used properly. So, be aware of when you\nare lazy loading properties and the total number of queries you execute\nper page. Make sure you always join required relationships and only\nselect the properties you need to access. It doesn't make sense to load\ndata if you're not going to be using it.\n\nHow?\n====\n\nIf you need help with keeping track of how many queries you have per\npage, frameworks like\n[Symfony](https://symfony.com/legacy/doc/gentle-introduction/1_4/en/16-Application-Management-Tools#chapter_16_sub_web_debug_toolbar)\nand [Zend Framework](https://framework.zend.com/) give you debug tools to\nshow you how many queries you have per page. Or of course you can always\nuse the\n[Profiling](https://www.doctrine-project.org/projects/doctrine1/en/latest/manual/component-overview.html#profiler)\ntool built in to Doctrine to log the queries in your application and\nkeep track of it that way.\n", - "date": "2009-05-29 00:00:00" + "contents": "If you're a PHP developer and would like to get familiar with the\nconcepts behind MVC Frameworks and ORMs then you should attend one of\nthe Sensio Labs hosted training sessions taught by one of our expert\nconsultants.\n\nThe course covers many topics such as:\n\n- Refactoring a flat file PHP application in to a MVC framework\n- Templating\n- Working environment\n- Routing and HTTP protocol\n- Object Relational Mapper\n- Using the session\n- Unit and Functional Testing\n- Caching your data\n\nThe training utilizes the Symfony MVC framework and the Doctrine Object\nRelational Mapper as the tools of choice for the workshop.\n\nIf you are interested in attending one of these sessions please contact\nme at [jonathan.wage@sensio.com](mailto:jonathan.wage@sensio.com) so we\ncan discuss details.\n", + "date": "2009-06-15 00:00:00" }, { - "url": "/2015/11/23/orm-2-5-2.html", - "slug": "orm-2-5-2", - "title": "Doctrine ORM 2.5.2 Release", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine ORM\n`2.5.2`.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"~2.5.2\"\n }\n}\n```\n\nChanges since 2.5.1\n===================\n\nThis is a list of issues resolved in `2.5.2` since `2.5.1`:\n\nBug Fixes\n---------\n\n- [DDC-3677](https://github.com/doctrine/orm/issues/4508)\n [GH-1375](https://github.com/doctrine/orm/pull/3677) DDC-3671\n prevent duplicate unique index\n- [DDC-3899](https://github.com/doctrine/orm/issues/4754)\n [GH-1375](https://github.com/doctrine/orm/pull/3899) Fixed\n wrong property name\n- [DDC-3908](https://github.com/doctrine/orm/issues/4765)\n [GH-1375](https://github.com/doctrine/orm/pull/3908) Fix cache\n storage related test issues (due to doctrine/cache 1.5.0 changes)\n- [DDC-3911](https://github.com/doctrine/orm/issues/4769)\n [GH-1375](https://github.com/doctrine/orm/pull/3911) Backport\n of \"LimitSubqueryOutputWalker: fix aliasing of property in OrderBy\n from MappedSuperclass\"\n- [DDC-3973](https://github.com/doctrine/orm/issues/4832)\n [GH-1375](https://github.com/doctrine/orm/pull/3973)\n [[DDC-3711](https://github.com/doctrine/orm/issues/4547)]\n Correct Error on manyToMany with composite primary key + add Tests\n\nImprovements\n------------\n\n- [DDC-3978](https://github.com/doctrine/orm/issues/4837)\n [GH-1375](https://github.com/doctrine/orm/pull/3978) Allow\n symfony 3.0 components on 2.5\n\nDocumentation\n-------------\n\n- [DDC-3938](https://github.com/doctrine/orm/issues/4798)\n [GH-1375](https://github.com/doctrine/orm/pull/3938) Update\n Upgrade.md after minor bc break in 2.5.1\n\nPlease report any issues you may have with the update on the mailing\nlist or on [JIRA](https://www.doctrine-project.org/jira/browse/DDC).\n", - "date": "2015-11-23 00:00:00" + "url": "/2013/09/25/phpcr-odm-qbv2.html", + "slug": "phpcr-odm-qbv2", + "title": "PHPCR ODM QueryBuilder v2", + "authorName": "dantleech", + "authorEmail": "", + "contents": "managed to merge the new query builder.\n\nI developed the original query builder about 9 months ago - it was one\nof my first contributions to the PHPCR-ODM doctrine project. It was\nheavily based on the ORM query builder and the consensus being that we\nshould make the ODM as intuitive as possible for existing ORM users.\n\nAbstracting PHPCR to fit the existing interface worked up until a point,\nwe could implement the *basic* functionality of the ORM Query Builder\nexactly, things started to come undone when we looked at implementing\njoins.\n\nI had added the joins in the API but didn't get around to implementing\nthem, the methods just threw \"not implemented\" exceptions. Later, when\nwe wanted to implement them, it wasn't so simple. Infact, upon closer\ninspection, many of the things available in the PHPCR API's Query Object\nModel interface were not covered by the model of the query builder we\nhad chosen, in short, it was not fit for purpose. I expounded this on\nthe following wiki page:\n\n- [https://github.com/symfony-cmf/symfony-cmf/wiki/Query-Builder-v2](https://github.com/symfony-cmf/symfony-cmf/wiki/Query-Builder-v2)\n\nAs detailed in the above linked page, it seemed to me that either we\nimplemented a 2 part factory heavy query builder or a fluent node based\nquery builder. The node based design won. However, at the time I never\nimagined it would take so long to write! So nearly 2 months later here\nwe are.\n\nSome features of the new query builder\n\n- Can fully express the PHPCR QOM (Query Object Model).\n- Features a fluent interface.\n- Strict validation and helpful exception messages.\n- Less verbose than the PHPCR QOM model.\n\nLets compare a PHPCR QOM query with its new query builder counterpart:\n\nThe following two examples are equivalent and both select a blog posts\nwith node name \"My Post Title\" having the ODM class \"BlogPost\". We order\nthe result set first by publishing date and then by title.\n\nUsing the PHPCR QOM:\n\n~~~~ {.sourceCode .php}\ncreateQuery(\n // SourceInterface (from)\n $qom->selector('nt:unstructured', 'p')\n $qom->andConstraint(\n $qom->comparison(\n $qom->propertyValue('p', 'phpcr:class'),\n $qom->bindVariableValue('phpcr_class'),\n QueryObjectModelInterface::JCR_OPERATOR_EQUAL_TO\n ),\n $qom->comparison(\n $qom->nodeLocalName('p'),\n $qom->bindVariableValue('post_title'),\n QueryObjectModelInterface::JCR_OPERATOR_EQUAL_TO\n ),\n array(\n $qom->ascending($qom->propertyValue('published_on', 'p'))\n $qom->ascending($qom->propertyValue('title', 'p'))\n )\n )\n);\n$q->bindValue('phpcr_class', 'Blog\\Post');\n$q->bindValue('post_title', 'My Post Title');\n$res = $q->execute();\n~~~~\n\nUsing the new PHPCR-ODM query builder:\n\n~~~~ {.sourceCode .php}\ncreateQueryBuilder()\n ->fromDocument('Blog\\Post', 'p')\n ->where()\n ->eq()->field('p.title')->parameter('post_title')->end()\n ->end()\n ->orderBy()\n ->asc()->field('p.published_on')->end()\n ->asc()->field('p.title')->end()\n ->end()\n ->setParameter('post_title', 'My Post Title')\n ->getQuery();\n$res = $q->execute();\n~~~~\n\nWhilst the two examples above are equivalent it should be noted that we\nare being slightly unfair to the PHPCR QOM as we are forced to add the\n`phpcr:class` constraint, which is a PHPCR-ODMism. Despite this, the new\nAPI is clearly less verbose and, I hope, more intelligible.\n\nThe API allows chaining together operands:\n\n~~~~ {.sourceCode .php}\ncreateQueryBuilder();\n$qb\n ->from()\n ->document('Blog\\Post', 'p')\n ->end()\n ->where()\n ->andX()\n ->orX()\n ->eq()->upperCase()->field('p.username')->end()->literal('DANTLEECH')->end()\n ->eq()->field('c.initials')->literal('dtl')->end()\n ->end()\n ->lte()->field('p.published_on')->literal('2013-09-14')->end()\n ->end()\n ->end();\n~~~~\n\nThe API also allows you to break the query into multiple statements:\n\n~~~~ {.sourceCode .php}\nfrom()->document('Blog\\Post', 'p');\n$qb->where()->eq()->field('p.title')->literal('Foobar');\n$qb->orderBy()->asc()->field('p.title');\n~~~~\n\nAnd to add extra criteria to an existing query builder instance (useful\nif the query builder is instantiated and initialized by a vendor\nlibrary):\n\n~~~~ {.sourceCode .php}\nandWhere()->field('f.site_id')->literal(1);\n }\n}\n~~~~\n\nAs a bonus, the nature of the API also allows us to easily add multiple\nconstraints to `andX` and `orX` operator nodes, something not easily\ndone with the native PHPCR builder:\n\n~~~~ {.sourceCode .php}\nfromDocument('Blog\\Post', 'p');\n\n// we can add one or many constraints to an \"andX\" node...\n$qb->where()->andX()\n ->fieldIsset('p.username')\n ->gt()->field('p.rank')->literal(50)->end()\n ->eq()->fueld('p.title')->literal('This is a title');\n~~~~\n\nThe documentation is now online and is made up of both a guide and a\nreference:\n\n- Guide:\n [http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder.html](http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder.html)\n- Reference:\n [http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder-reference.html](http://docs.doctrine-project.org/projects/doctrine-phpcr-odm/en/latest/reference/query-builder-reference.html)\n\n", + "date": "2013-09-25 00:00:00" }, { - "url": "/2009/05/27/want-to-contribute-to-doctrine.html", - "slug": "want-to-contribute-to-doctrine", - "title": "Want to contribute to Doctrine?", + "url": "/2008/03/04/doctrine-cheat-sheet.html", + "slug": "doctrine-cheat-sheet", + "title": "Doctrine Cheat Sheet", "authorName": "jwage", "authorEmail": "", - "contents": "Looking for Developers\n======================\n\nWe've been on the hunt for more Doctrine contributors. As the number of\nusers of Doctrine grew we expected the number of commiters to rise with\nit but this has not been the case. We do get a lot of small patches here\nand there, but we are hoping for some of them to grow in to full-time\ncore developers that are involved with all the decisions made about\nDoctrine.\n\nCall to the community\n=====================\n\nYou can see Roman made a call to the Doctrine developers mailing list\n[here](http://groups.google.com/group/doctrine-dev/browse_thread/thread/c6e4c74e1a392909)\nabout the issue. We are taking all the feedback in to consideration and\nwe have started by creating a\n[contribute](https://www.doctrine-project.org/contribute) page that is\nlinked from the primary menu of the website. We hope that this will help\nwith new users finding information faster about how they can get started\ncontributing.\n\nOther Ideas\n===========\n\nIf you have any additional ideas about how we can promote contributing\nto Doctrine you can discuss them in the comments or on the [mailing list\nthread](http://groups.google.com/group/doctrine-dev/browse_thread/thread/c6e4c74e1a392909).\n", - "date": "2009-05-27 00:00:00" + "contents": "I have put together a cheat sheet for all the day to day usage syntaxes\nof Doctrine. The cheat sheet can be found here. This is the first draft\nof the document so any comments and feedback would be very useful.\n", + "date": "2008-03-04 00:00:00" }, { - "url": "/2013/03/24/doctrine-2-4-beta.html", - "slug": "doctrine-2-4-beta", - "title": "Doctrine 2.4 Beta1 released", - "authorName": "Benjamin Eberlei", - "authorEmail": "", - "contents": "**24.03.2013**\n\nWe have released the first beta version of Doctrine 2.4. Some of the\nchanges are listed in [this\ntalk](https://speakerdeck.com/asm89/what-is-new-in-doctrine) by\nAlexander and me from Symfony Live Berlin last year.\n\nYou can find a list of changes on\n[Jira](https://www.doctrine-project.org/jira/issues/?jql=project%20in%20(DDC%2C%20DBAL%2C%20DCOM)%20AND%20fixVersion%20%3D%20%222.4%22%20AND%20status%20%3D%20Resolved%20ORDER%20BY%20priority%20DESC).\n\nYou can install the release with [Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.4.0-beta1\",\n \"doctrine/dbal\": \"2.4.0-beta1\",\n \"doctrine/common\": \"2.4.0-rc1\"\n }\n }\n\nPlease test this release with your existing applications to allow us to\nfind BC breaks and remove them before the final release. The plan is to\nrelease the final version in the next 4-6 weeks.\n\nIn these next weeks we will work to incorporate all changes in the\ndocumentation.\n", - "date": "2013-03-24 00:00:00" + "url": "/2019/05/21/monetizing-open-source.html", + "slug": "monetizing-open-source", + "title": "Monetizing Open Source", + "authorName": "Jonathan H. Wage", + "authorEmail": "jonwage@gmail.com", + "contents": "In our quest to make Doctrine financially sustainable, we have created\nDoctrine Company, LLC under which the team can conduct business. We've had a strong\n10 years of open source success but we believe that in order for Doctrine to be\ntruly sustainable and to last another decade, we need to diversify and monetize\nthe project. It is our goal to be able to generate enough money through the project\nto fund full or part time work on the project. Below you will find details of some\nof our monetization efforts.\n\n## Patreon\n\nPatreon is a platform that allows open source maintainers, artists, creators, etc. to create\nrelationships with their users and offer them benefits for becoming a patron.\n\nIf you would like to make a donation to the project, Patreon is the place to do it.\nDepending on the tier, we offer a few different benefits:\n\n- A mention on Twitter.\n- Your name and website link on the Doctrine website.\n- Priority responses to Stack Overflow or GitHub issues/PRs.\n- Placement on a [Partners](/partners.html) page on the Doctrine website, with your logo, link, and a paragraph advertising your company's services.\n\n[Become a Patreon](https://www.patreon.com/phpdoctrine) of Doctrine today!\n\n## Consulting\n\nUnder the Doctrine Company, we are providing [consulting and training](/consulting.html)\nservices to companies that use PHP. The services we offer are not limited to Doctrine itself.\nOur team specializes in producing high quality PHP. Whether you are starting a new project or\nmodernizing a legacy application, we can help your team level up their skills with tools\nlike the following:\n\n- [Doctrine DBAL](/projects/dbal.html) - Connect to your favorite RDBMS using Doctrine's database abstraction library.\n- [Doctrine Database Migrations](/projects/migrations.html) - Safely manage your database schema and keep it up to date.\n- [Doctrine ORM](/projects/orm.html) - Represent your domain model cleanly with plain old PHP objects and ensure the integrity of your data.\n- [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) - Keep aesthetic debates out of your code reviews by adopting a coding standard and enforcing it in your build process. We can help integrate Doctrine's own [coding standard](/projects/coding-standard.html) into your project or help codify your own.\n- [Psalm](https://psalm.dev/) / [PHPStan](https://github.com/phpstan/phpstan) - Statically analyze your codebase and find bugs that would otherwise only be found at runtime in production.\n\nIf you are interested, take a look at our [Consulting](/consulting.html) page or contact\nus at [consulting@doctrine-project.org](mailto:consulting@doctrine-project.org) for more\ninformation.\n\n## Events\n\nWe will host regular monthly webinars using [Zoom](https://zoom.us/). Each month we will have different topics\npresented to you by members of the Doctrine Core team or greater PHP community. We already have\nsome great topics lined up for the next few months:\n\n- [Doctrine for Beginners on June 25th](/events/2/doctrine-for-beginners.html)\n- [Getting Started with Doctrine MongoDB ODM on July 16th](/events/3/getting-started-with-doctrine-mongodb-odm.html)\n- [PHP Internals for the Inquisitive Developer on September 10th](/events/1/php-internals-for-the-inquisitive-developer.html)\n\n## Tidelift\n\n[Tidelift](https://tidelift.com) is a managed open source subscription service backed by\ncreators and maintainers. Development teams get better maintained open source. Maintainers\nget paid.\n\nWe have partnered with Tidelift as a maintainer to guarantee a high level of maintenance for their\ncustomers. In return, Tidelift pays Doctrine maintainers a percentage of what the customer pays.\nTidelift is attempting to create a marketplace of open source maintainers and customers with the\ngoal of providing higher levels of confidence for commercial entities when using open source. This\ncan sometimes be one of the biggest challenges for using open source in the corporate world.\nTidelift is taking a unique approach to solving this problem and we are excited to be a part of it!\n\n## Carbon Ads\n\nOne of the most valuable assets we have besides software is our website and the traffic we\nreceive every month. You may have noticed some subtle ad placements on our website. These\ntext-based ads are provided by [Carbon Ads](https://www.carbonads.net/) which is an ad network\noptimized for reaching designers and developers. We understand ads can be annoying and we hope that\nour users understand the trade-off we've made by choosing to place ads on our website.\n\n## Partners\n\nFinally, we are partnering with commercial entities and other projects that use Doctrine to cross\npromote each other. Through our partner network we hope to introduce our users to vetted services\nand offerings from which they can benefit. Thanks to our [Partners](/partners.html) for supporting\nDoctrine.\n", + "date": "2019-05-21 00:00:00" }, { - "url": "/2009/03/03/doctrine-1-1-documentation.html", - "slug": "doctrine-1-1-documentation", - "title": "Doctrine 1.1 Documentation", + "url": "/2010/08/18/mongodb-odm-1-0-0beta1-released.html", + "slug": "mongodb-odm-1-0-0beta1-released", + "title": "MongoDB ODM 1.0.0BETA1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Today I have begun updating the documentation to reflect the changes\nmade in 1.1 and [The Guide to Doctrine for\nPHP](https://www.doctrine-project.org/projects/doctrine1/en/latest/) is now\navailable. We still have some more changes to make but most things have\nbeen updated and added.\n\nBelow is a list of some of the things that still need some updating.\n\n- Migrations\n- SoftDelete\n- Searchable\n\nPlease lend a hand to us by reviewing the documentation and helping us\nidentify things that are lacking or 100% missing. You can create new\ntickets in [trac](http://trac.doctrine-project.org) under the\n\"Documentation/Website\" milestone and we'll get them fixed asap.\n", - "date": "2009-03-03 00:00:00" + "contents": "Today I am happy to tell you we have released the first beta version of\nthe MongoDB Object Document Mapper. It contains many fixes and general\nimprovements across the code.\n\nWe fixed lots of things reported by our users in Jira but also made lots\nof other improvements like improving the use of atomic operators. Read\non for a complete list of the issues fixed in Jira:\n\nFixed Jira Issues\n=================\n\n\n\nToday I have upgraded the Doctrine website to symfony 1.1 and Doctrine\n0.11. The integration between the symfony framework and Doctrine with\nsfDoctrinePlugin has become pretty complete in the last few days. It now\nhas all the same functionality as the bundled sfPropelPlugin with\nsymfony 1.1 plus dozens more features a long with the Doctrine DBAL and\nORM. The main features introduced to the symfony framework are\nmigrations, DQL, behaviors, inheritance and a sprinkle of additional\nadmin generator features. I have also completely re-ported\nsfGuardDoctrinePlugin from sfGuardPlugin so it is in sync with it and\nhas exactly the same features, nothing more. The removed functionality\nwill be moved to separate plugins that work with sfGuardDoctrinePlugin.\n\n
\n\nThe source of the Doctrine website can be gotten from svn here\n[http://www.phpdoctrine.org/svnweb](http://www.phpdoctrine.org/svnweb)\n\n
\n\n\n", - "date": "2008-05-03 00:00:00" + "contents": "Today I would like to announce the official introduction of the Doctrine\nsandbox package. The Doctrine sandbox was first introduced in SVN a few\nmonths ago, but is now available as a downloaded package. Every major\nrelease of Doctrine has a sandbox available for it. The sandbox is a\nsample implementation of Doctrine that is ready to be used with zero\nconfiguration. It comes configured with a sqlite database so it requires\nthat you have pdo sqlite enabled on your server. The packages can be\ndownloaded here. I have also put together a small wiki page on how you\ncan get started using the sandbox to easily play with Doctrine. The wiki\npage can be found here.\n", + "date": "2008-02-18 00:00:00" }, { - "url": "/2009/06/15/sensio-labs-training-sessions.html", - "slug": "sensio-labs-training-sessions", - "title": "Sensio Labs Training Sessions", - "authorName": "jwage", + "url": "/2014/12/20/inflector-101.html", + "slug": "inflector-101", + "title": "Inflector 1.0.1 released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of\n`doctrine/inflector` 1.0.1.\n\nThe release includes minor fixes since the first 1.0.0 release, and also\nstabilizes and enforces support for HHVM.\n\n- [49: \\#46 - applying correct chmod() to generated cache\n file](https://github.com/doctrine/annotations/pull/49)\n- [50: Hotfix: match escaped quotes (revert\n \\#44)](https://github.com/doctrine/annotations/pull/50)\n\n- [1: Corrected keyword\n spelling](https://github.com/doctrine/inflector/pull/1)\n- [2: Documentation\n fixes](https://github.com/doctrine/inflector/pull/2)\n- [3: Added the branch alias for\n master](https://github.com/doctrine/inflector/pull/3)\n- [4: Fixed typo](https://github.com/doctrine/inflector/pull/4)\n- [5: exclude word 'staff' from inflectable\n ones](https://github.com/doctrine/inflector/pull/5)\n- [6: add LICENSE file](https://github.com/doctrine/inflector/pull/6)\n- [7: HHVM is not allowed to fail anymore. Inflector should work as\n expected](https://github.com/doctrine/inflector/pull/7)\n- [10: Added the local phpunit config to the ignore\n list](https://github.com/doctrine/inflector/pull/10)\n- [12: Adding 'human' to the irregular\n array](https://github.com/doctrine/inflector/pull/12)\n- [14: Add testing on PHP 5.6 on\n Travis](https://github.com/doctrine/inflector/pull/14)\n\nYou can install the Inflector library using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/inflector\": \"1.0.1\"\n }\n}\n~~~~\n", + "date": "2014-12-20 00:00:00" + }, + { + "url": "/2013/12/23/our-hhvm-roadmap.html", + "slug": "our-hhvm-roadmap", + "title": "Our HHVM Roadmap", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "If you're a PHP developer and would like to get familiar with the\nconcepts behind MVC Frameworks and ORMs then you should attend one of\nthe Sensio Labs hosted training sessions taught by one of our expert\nconsultants.\n\nThe course covers many topics such as:\n\n- Refactoring a flat file PHP application in to a MVC framework\n- Templating\n- Working environment\n- Routing and HTTP protocol\n- Object Relational Mapper\n- Using the session\n- Unit and Functional Testing\n- Caching your data\n\nThe training utilizes the Symfony MVC framework and the Doctrine Object\nRelational Mapper as the tools of choice for the workshop.\n\nIf you are interested in attending one of these sessions please contact\nme at [jonathan.wage@sensio.com](mailto:jonathan.wage@sensio.com) so we\ncan discuss details.\n", - "date": "2009-06-15 00:00:00" + "contents": "Facebook has been [pushing HHVM alot\nlately](https://hhvm.com/blog/2813/we-are-the-98-5-and-the-16) ,\nhelping open source projects to get their test-suite running 100%. For\nDoctrine HHVM is particularly interesting, because of the performance\ngains that the complex PHP algorithms inside ORM would probably get.\nFrom my current feeling Doctrine will be the PHP open-source project\ngetting the most gain from running on HHVM. However with the tests not\nyet passing on the ORM, we can only imagine how big that performance\nimprovement will be.\n\nOne roadblock for us to investigate HHVM in more detail was missing CI\nsupport. But then Travis CI [announced support for\nHHVM](https://blog.travis-ci.com/2013-12-16-test-php-code-with-the-hiphop-vm)\nlast week. With automated testing support available we think it is time\nto announce our official HHVM roadmap.\n\nOne of our goals for 2014 is running DBAL and ORM on HHVM with 100% of\nthe testsuites passing. Every Doctrine subproject targeting to support\nHHVM will start running the tests against HHVM with `allow_failure`\nenabled on Travis CI. Whenever a Doctrine subproject passes all its\ntests on HHVM, we will remove the `allow_failure` and the project will\nbe officially supporting HHVM from that version on.\n\nSo far we have been working on the Common projects to run on HHVM for\nseveral months now and Guilherme and Alexander are contributing to HHVM\nitself to get some missing APIs working. We are happy to announce that\nthe following Common projects currently have full HHVM support from us:\n\n- [Collections](https://travis-ci.org/doctrine/collections)\n- [Inflector](https://travis-ci.org/doctrine/inflector)\n- [Lexer](https://travis-ci.org/doctrine/lexer)\n\nGuilherme is working on getting\n[Annotations](https://travis-ci.org/doctrine/annotations) and\n[Cache](https://travis-ci.org/doctrine/cache) working and the\n[Common](https://travis-ci.org/doctrine/common) mainproject will be\nevaluated shortly after all the common projects succeed.\n[DBAL](https://travis-ci.org/doctrine/dbal) and\n[ORM](https://travis-ci.org/doctrine/orm) will be much more work,\nbut we are very confident to achieve this goal.\n\nIf you want to help us with this goal, you can check the current Travis\nfailure reports of the projects and come up with ideas how to fix them\nin the Doctrine code or with bug reports for HHVM. We are glad to\ndiscuss these issues on Freenode IRC in channel \"\\#doctrine-dev\".\n\nWith this announcement we hope that other PHP projects, frameworks and\nlibraries will follow to make HHVM an official build target in the\nfuture.\n", + "date": "2013-12-23 00:00:00" }, { "url": "/2023/08/21/doctrine-orm-team-meetup.html", @@ -1998,481 +1818,445 @@ "date": "2023-08-21 00:00:00" }, { - "url": "/2010/08/06/doctrine2-orm-beta3.html", - "slug": "doctrine2-orm-beta3", - "title": "Doctrine ORM Beta 3 released", - "authorName": "romanb", - "authorEmail": "", - "contents": "We would like to announce the immediate release of Doctrine ORM BETA 3:\n\n- [Installation](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA3)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10060)\n\nWe fixed 45 issues, most of them bugs reported by our users. The ORM\npackage is now in a state where no new features will be added and we\nwill fully concentrate the efforts on fixing bugs and bringing the\nrelease to a stable state.\n\nNotable changes include:\n\n- `EntityManager#merge()` has been improved considerably and now also\n accepts new entities.\n- Uninitialized Proxies can now be serialized and only throw an\n exception when they are unserialized and accessed without being\n merged into the EntityManager.\n- New method `EntityManager#getPartialReference()` that returns a\n partial entity that only contains the entities primary key and won't\n lazy-load (hence \"partial\").\n\nThis release contains three backwards incompatible changes you should\nknow about when upgrading:\n\nChanged SQL implementation of Postgres and Oracle DateTime types\n================================================================\n\nThe DBAL Type \"datetime\" included the Timezone Offset in both Postgres\nand Oracle. As of this version they are now generated without Timezone\n(TIMESTAMP WITHOUT TIME ZONE instead of TIMESTAMP WITH TIME ZONE). See\n[this comment to Ticket\nDBAL-22](https://www.doctrine-project.org/jira/browse/DBAL-22?focusedCommentId=13396&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_13396)\nfor more details as well as migration issues for PostgreSQL and Oracle.\n\nBoth Postgres and Oracle will throw Exceptions during hydration of\nObjects with \"DateTime\" fields unless migration steps are taken!\n\nRemoved multi-dot/deep-path expressions in DQL\n==============================================\n\nThe support for implicit joins in DQL through the multi-dot/Deep Path\nExpressions was dropped. For example:\n\n SELECT u FROM User u WHERE u.group.name = ?1\n\n\"u.group.name\" is a nested path expression that is an implicit join.\nInternally the DQL parser would rewrite these queries to:\n\n SELECT u FROM User u JOIN u.group g WHERE g.name = ?1\n\nThis explicit notation will be the only supported notation as of now.\nThe internal handling of nested path expressions for implicit joins in\nthe DQL Parser was too complex and error prone in edge cases and\nrequired special treatment for several features we added. Note that this\ndoes not remove any existing functionality, only a convenience notation\nthat can be expressed otherwise. Hence the generated SQL of both\nnotations is exactly the same.\n\nDefault Allocation Size for Sequences\n=====================================\n\nThe default allocation size for sequences has been changed from 10 to 1.\nThis step was made to not cause confusion with users and also because it\nis partly some kind of premature optimization.\n\nWhat next\n=========\n\nIt seems likely that we will not be able to hold the anticipated release\ndate of September 1st for the final release. Instead September 1st will\nlikely see the last beta release, BETA 4, after which we hope to enter\nthe release candiates soon, followed by the stable release.\n", - "date": "2010-08-06 00:00:00" + "url": "/2015/04/02/orm-2-5-0.html", + "slug": "orm-2-5-0", + "title": "Doctrine ORM 2.5.0 Release", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n`2.5.0`.\n\nThis release spans over almost 2 years of development, and is a major\neffort by the team and the community to make the ORM more robust and\nperformant.\n\n[457\nissues](?jql=project%20%3D%20DDC%20AND%20fixVersion%20%3D%202.5%20ORDER%20BY%20status%20DESC%2C%20priority%20DESC)\nwere resolved in this release, so we are very proud of the work being\ndone by the community and the core team.\n\nWhat is new in 2.5.x?\n=====================\n\nDoctrine ORM 2.5.0 comes with a set of major improvements:\n\n- The Second-level Cache, a component that greatly improves ORM\n performance\n- Embeddable classes, allowing for a more fine-grained design of your\n entities without having to resort to one-to-one associations for\n Value Objects\n- Entity type specific event listeners, for improved event handling\n performance\n- Improvements in the Criteria Collection filtering API, now also\n supporting `EXTRA_LAZY` filtering\n\nWhat has to be done to upgrade to 2.5.x?\n========================================\n\nSome backwards incompatible changes were also involved in this release:\nto read them, along with a more extensive list of the 2.5.0 changes,\nplease consult [the upgrade\nnotes](http://docs.doctrine-project.org/en/latest/changelog/migration_2_5.html).\n\nStability\n=========\n\nWe currently do not have a release schedule for Doctrine ORM `2.6.0`.\n\nAs of today, Doctrine ORM `2.5.x` is our stable distribution, and will\nreceive regular bugfix releases.\n\nDoctrine ORM `2.4.8` will be the last bugfix release for the `2.4.x`\nseries. Further releases will only occur in the eventuality of a\nsecurity issue being discovered.\n\nWe will also keep patching previous versions of the ORM in the\neventuality of a security issue being discovered.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"~2.5.0\"\n }\n}\n```\n\nChanges since 2.4.0\n===================\n\nThis is a list of issues resolved in `2.5.0` since `2.4.0`:\n\nNew Feature\n-----------\n\n- [DDC-93](https://github.com/doctrine/orm/issues/1581) - It\n would be nice if we could have support for ValueObjects\n- [DDC-1149](https://github.com/doctrine/orm/issues/1749)\n -Optimize OneToMany and ManyToMany without join\n- [DDC-1216](https://github.com/doctrine/orm/issues/1823)\n -A way to mark an entity to always use result cache. Like\n @UseResultCache class annotation.\n- [DDC-1247](https://github.com/doctrine/orm/issues/1856)\n -Implement AnnotationDriver::addExcludePath\n- [DDC-1563](https://github.com/doctrine/orm/issues/2199)\n -Result cache for repository queries\n- [DDC-2021](https://github.com/doctrine/orm/issues/2698)\n -Array Data in Member OF\n- [DDC-2773](https://github.com/doctrine/orm/issues/3520)\n -[\\#835](https://github.com/doctrine/orm/pull/835) Value\n objects (Based on \\#634)\n- [DDC-2959](https://github.com/doctrine/orm/issues/3722)\n -[\\#937](https://github.com/doctrine/orm/pull/937)\n Extra-lazy for containsKey on collections\n- [DDC-3117](https://github.com/doctrine/orm/issues/3893)\n -[\\#1027](https://github.com/doctrine/orm/pull/1027) Support\n for Partial Indexes for PostgreSql and Sqlite\n- [DDC-3161](https://github.com/doctrine/orm/issues/3941)\n -[\\#1054](https://github.com/doctrine/orm/pull/1054)\n SQLFilters enahancements\n- [DDC-3186](https://github.com/doctrine/orm/issues/3968)\n -[\\#1069](https://github.com/doctrine/orm/pull/1069) added\n method to be able to reuse the console application\n- [DDC-3231](https://github.com/doctrine/orm/issues/4019)\n -[\\#1089](https://github.com/doctrine/orm/pull/1089) Entity\n repository generator default repository\n- [DDC-3300](https://github.com/doctrine/orm/issues/4094)\n -[\\#1130](https://github.com/doctrine/orm/pull/1130) Added\n resolve entities support in discrim. map\n- [DDC-3385](https://github.com/doctrine/orm/issues/4187)\n -[\\#1181](https://github.com/doctrine/orm/pull/1181) Support\n fetching entities by aliased name\n- [DDC-3462](https://github.com/doctrine/orm/issues/4272)\n -[\\#1230](https://github.com/doctrine/orm/pull/1230) Allow\n dumping SQL query when passing DQL on cli\n- [DDC-3503](https://github.com/doctrine/orm/issues/4317)\n -[\\#1257](https://github.com/doctrine/orm/pull/1257) Resolve\n target entity also in discriminator map (allows interfaces and\n custom names in discriminator map)\n- [DDC-3567](https://github.com/doctrine/orm/issues/4386)\n -[\\#1303](https://github.com/doctrine/orm/pull/1303) make\n QueryBuilder::getAllAliases public\n\nImprovement\n-----------\n\n- [DDC-54](https://github.com/doctrine/orm/issues/5047)\n -Trigger postLoad events and callbacks after associations have been\n initialized\n- [DDC-1590](https://github.com/doctrine/orm/issues/2227)\n -Fix Inheritance in Code-Generation\n- [DDC-1787](https://github.com/doctrine/orm/issues/2441)\n -Fix for JoinedSubclassPersister, multiple inserts with versioning\n throws an optimistic locking exception\n- [DDC-1858](https://github.com/doctrine/orm/issues/2519)\n -LIKE and IS NULL operators not supported in HAVING clause\n- [DDC-2052](https://github.com/doctrine/orm/issues/2732)\n -Custom tree walkers are not allowed to add new components to the\n query\n- [DDC-2061](https://github.com/doctrine/orm/issues/2742)\n -Matching Criteria on a PersistentCollection only works on OneToMany\n associations\n- [DDC-2128](https://github.com/doctrine/orm/issues/2815)\n -[\\#507](https://github.com/doctrine/orm/pull/507) Now\n MetaDataFilter takess also regexp. For example whern you want to\n- [DDC-2183](https://github.com/doctrine/orm/issues/2876)\n -Second Level Cache improvements\n- [DDC-2210](https://github.com/doctrine/orm/issues/2907)\n -PHP warning in ProxyFactory when renaming proxy file\n- [DDC-2217](https://github.com/doctrine/orm/issues/2914)\n -Return a lazy collection from\n PersistentCollection::match(\\$criteria)\n- [DDC-2319](https://github.com/doctrine/orm/issues/3023)\n -[\\#590](https://github.com/doctrine/orm/pull/590) DQL\n Query: process ArrayCollection values to ease development\n- [DDC-2534](https://github.com/doctrine/orm/issues/3258)\n -[\\#711](https://github.com/doctrine/orm/pull/711) Coveralls\n code coverage\n- [DDC-2538](https://github.com/doctrine/orm/issues/3262)\n -[\\#713](https://github.com/doctrine/orm/pull/713) Quick\n grammar fix\n- [DDC-2544](https://github.com/doctrine/orm/issues/3269)\n -[\\#717](https://github.com/doctrine/orm/pull/717) Allow\n query parameters starting with an underscore\n- [DDC-2546](https://github.com/doctrine/orm/issues/3271)\n -[\\#719](https://github.com/doctrine/orm/pull/719) Access\n properties via static:: instead of self::.\n- [DDC-2615](https://github.com/doctrine/orm/issues/3347)\n -LIKE operator not supported in HAVING clause\n- [DDC-2636](https://github.com/doctrine/orm/issues/3370)\n -Handle SQLite with dot notation in @Table and @JoinTable\n- [DDC-2639](https://github.com/doctrine/orm/issues/3373)\n -[\\#771](https://github.com/doctrine/orm/pull/771) Added\n indexBy option to createQueryBuilder\n- [DDC-2770](https://github.com/doctrine/orm/issues/3517)\n -[\\#833](https://github.com/doctrine/orm/pull/833)\n Generate-Entities-Console-Command: Adding an 'avoid backup' flag\n- [DDC-2789](https://github.com/doctrine/orm/issues/3537)\n -[\\#844](https://github.com/doctrine/orm/pull/844) Teach\n orm:validate-schema to --skip-mapping and --skip-sync\n- [DDC-2794](https://github.com/doctrine/orm/issues/3543)\n -the Paginator does not support arbitrary join\n- [DDC-2814](https://github.com/doctrine/orm/issues/3566)\n -[\\#858](https://github.com/doctrine/orm/pull/858) lifts an\n unnecessary restriction on ResultSetMappingBuilder\n- [DDC-2824](https://github.com/doctrine/orm/issues/3577)\n -[\\#863](https://github.com/doctrine/orm/pull/863) The new\n configuration option: defaultQueryHints\n- [DDC-2861](https://github.com/doctrine/orm/issues/3617)\n -[\\#881](https://github.com/doctrine/orm/pull/881) Fix\n persistence exception on a table with a schema on a platform without\n schema support\n- [DDC-2865](https://github.com/doctrine/orm/issues/3621)\n -[\\#882](https://github.com/doctrine/orm/pull/882) Efficient\n counting on Criteria\n- [DDC-2868](https://github.com/doctrine/orm/issues/3624)\n -[\\#885](https://github.com/doctrine/orm/pull/885) Add\n support for ManyToMany Criteria\n- [DDC-2926](https://github.com/doctrine/orm/issues/3686)\n -[\\#914](https://github.com/doctrine/orm/pull/914) added\n license badge\n- [DDC-2970](https://github.com/doctrine/orm/issues/3735)\n -[\\#946](https://github.com/doctrine/orm/pull/946) Cleaned\n up unused imports\n- [DDC-2981](https://github.com/doctrine/orm/issues/3745)\n -Multi get for second level cache (Doctrine Cache related)\n- [DDC-2982](https://github.com/doctrine/orm/issues/3746)\n -[\\#954](https://github.com/doctrine/orm/pull/954) Multi Get\n support for Second Level Cache\n- [DDC-2984](https://github.com/doctrine/orm/issues/3748)\n -Support Custom DBAL types to be used as identifiers\n- [DDC-2991](https://github.com/doctrine/orm/issues/3755)\n -[\\#957](https://github.com/doctrine/orm/pull/957) makes\n doctrine less dependent upon the symfony yaml component\n- [DDC-2999](https://github.com/doctrine/orm/issues/3763)\n -[\\#962](https://github.com/doctrine/orm/pull/962) Stop\n executeDeletions when there is nothing to to delete anymore\n- [DDC-3000](https://github.com/doctrine/orm/issues/3767)\n -[\\#963](https://github.com/doctrine/orm/pull/963) SQLFilter\n -- allows to check if a parameter was set\n- [DDC-3004](https://github.com/doctrine/orm/issues/3771)\n -[\\#966](https://github.com/doctrine/orm/pull/966) Simplify\n build matrix\n- [DDC-3005](https://github.com/doctrine/orm/issues/3772)\n -Events::postLoad fires without filled associations\n- [DDC-3014](https://github.com/doctrine/orm/issues/3781)\n -[\\#973](https://github.com/doctrine/orm/pull/973) Added\n index flags support in annotation, xml & yaml mapping drivers.\n- [DDC-3032](https://github.com/doctrine/orm/issues/3801)\n -[\\#980](https://github.com/doctrine/orm/pull/980) Added\n options attribute export to Annotation, Xml & Yaml exporters.\n- [DDC-3039](https://github.com/doctrine/orm/issues/3808)\n -[\\#983](https://github.com/doctrine/orm/pull/983) Added\n MEMBER OF and INSTANCE OF to ExpressionBuilder\n- [DDC-3068](https://github.com/doctrine/orm/issues/3840)\n -EntityManager::find does not accept an array of object as a primary\n key\n- [DDC-3070](https://github.com/doctrine/orm/issues/3843)\n -[\\#1001](https://github.com/doctrine/orm/pull/1001)\n [DDC-3005](https://github.com/doctrine/orm/issues/3772)\n Defer invoking of postLoad event to the end of hydration cycle.\n- [DDC-3076](https://github.com/doctrine/orm/issues/3849)\n -[\\#1006](https://github.com/doctrine/orm/pull/1006)\n Handling invalid discriminator values\n- [DDC-3114](https://github.com/doctrine/orm/issues/3891)\n -[\\#1026](https://github.com/doctrine/orm/pull/1026) Remove\n some redundant clauses\n- [DDC-3133](https://github.com/doctrine/orm/issues/3911)\n -[\\#1036](https://github.com/doctrine/orm/pull/1036) Move\n space addition to implementation.\n- [DDC-3138](https://github.com/doctrine/orm/issues/3916)\n -[\\#1037](https://github.com/doctrine/orm/pull/1037) I can't\n look at those semicolons, sorry ;-)\n- [DDC-3150](https://github.com/doctrine/orm/issues/3929)\n -[\\#1047](https://github.com/doctrine/orm/pull/1047) Minor\n grammatical corrections\n- [DDC-3178](https://github.com/doctrine/orm/issues/3959)\n -[\\#1064](https://github.com/doctrine/orm/pull/1064) remove\n on-update from join-column\n- [DDC-3249](https://github.com/doctrine/orm/issues/4037)\n -[\\#1105](https://github.com/doctrine/orm/pull/1105) Add\n support for nesting embeddables\n- [DDC-3257](https://github.com/doctrine/orm/issues/4046)\n -[\\#1112](https://github.com/doctrine/orm/pull/1112)\n DefaultRepositoryFactory: single repository for aliased entities\n- [DDC-3258](https://github.com/doctrine/orm/issues/4047)\n -[\\#1113](https://github.com/doctrine/orm/pull/1113) Added\n support for composite primary key on findBy methods and Criteria\n- [DDC-3274](https://github.com/doctrine/orm/issues/4064)\n -Improve schema validator error message\n- [DDC-3275](https://github.com/doctrine/orm/issues/4065)\n -[\\#1121](https://github.com/doctrine/orm/pull/1121)\n [DDC-3274](https://github.com/doctrine/orm/issues/4064)\n Improve schema validator error message for invalid bi-directional\n relations\n- [DDC-3276](https://github.com/doctrine/orm/issues/4066)\n -[\\#1122](https://github.com/doctrine/orm/pull/1122) Support\n arithmetic expressions in `COUNT()`\n- [DDC-3304](https://github.com/doctrine/orm/issues/4098)\n -[EntityGenerator] Embeddables properties and methods are broken\n- [DDC-3305](https://github.com/doctrine/orm/issues/4099)\n -[\\#1133](https://github.com/doctrine/orm/pull/1133)\n [Embeddables] Improved exception message\n- [DDC-3307](https://github.com/doctrine/orm/issues/4101)\n -[\\#1135](https://github.com/doctrine/orm/pull/1135)\n [DDC-3304](https://github.com/doctrine/orm/issues/4098)\n Add support for embeddables in entity generator\n- [DDC-3418](https://github.com/doctrine/orm/issues/4223)\n -Indexes not inherited from mapped superclass\n- [DDC-3457](https://github.com/doctrine/orm/issues/4266)\n -[\\#1227](https://github.com/doctrine/orm/pull/1227) Ensure\n query cache is not ArrayCache in production\n- [DDC-3461](https://github.com/doctrine/orm/issues/4271)\n -[\\#1229](https://github.com/doctrine/orm/pull/1229)\n Identity in onetoone association builder\n- [DDC-3477](https://github.com/doctrine/orm/issues/4287)\n -[\\#1238](https://github.com/doctrine/orm/pull/1238) Avoid\n prefixing columns when `false` is assigned to `column-prefix`\n- [DDC-3479](https://github.com/doctrine/orm/issues/4289)\n -[\\#1240](https://github.com/doctrine/orm/pull/1240) Include\n IDs in the exception message to ease debugging\n- [DDC-3483](https://github.com/doctrine/orm/issues/4294)\n -[\\#1243](https://github.com/doctrine/orm/pull/1243) Fixed\n phpunit tests autoload requirements and moved to composer\n autoload-dev\n- [DDC-3486](https://github.com/doctrine/orm/issues/4297)\n -[\\#1245](https://github.com/doctrine/orm/pull/1245)\n Implemented support for one to many extra lazy with joined\n inheritance.\n- [DDC-3487](https://github.com/doctrine/orm/issues/4298)\n -[\\#1246](https://github.com/doctrine/orm/pull/1246) Moved\n delete() and update() to proper locations.\n- [DDC-3490](https://github.com/doctrine/orm/issues/4302)\n -[\\#1248](https://github.com/doctrine/orm/pull/1248)\n improved error handling for invalid association values \\#2\n- [DDC-3492](https://github.com/doctrine/orm/issues/4304)\n -[\\#1249](https://github.com/doctrine/orm/pull/1249) Support\n for extra lazy get for both owning and inverse side on many to many\n associations.\n- [DDC-3495](https://github.com/doctrine/orm/issues/4307)\n -[\\#1251](https://github.com/doctrine/orm/pull/1251) travis:\n optimize to run coverage only once\n- [DDC-3496](https://github.com/doctrine/orm/issues/4308)\n -[\\#1252](https://github.com/doctrine/orm/pull/1252) Include\n className in calls to NamingStrategy joinColumnName method\n- [DDC-3501](https://github.com/doctrine/orm/issues/4315)\n -[\\#1255](https://github.com/doctrine/orm/pull/1255)\n Cleanup: PHP 5.3 support end\n- [DDC-3504](https://github.com/doctrine/orm/issues/4318)\n -[\\#1258](https://github.com/doctrine/orm/pull/1258)\n Classify persisters into more granular namespaces.\n- [DDC-3514](https://github.com/doctrine/orm/issues/4328)\n -LimitSubqueryOutputWalker should not duplicate orderBy clauses\n- [DDC-3521](https://github.com/doctrine/orm/issues/4336)\n -[\\#1269](https://github.com/doctrine/orm/pull/1269)\n [DDC-3520](https://github.com/doctrine/orm/issues/4335)\n self-update composer before install\n- [DDC-3528](https://github.com/doctrine/orm/issues/4343)\n -[\\#1274](https://github.com/doctrine/orm/pull/1274)\n PersistentCollection now extends AbstractLazyCollection.\n- [DDC-3541](https://github.com/doctrine/orm/issues/4358)\n -[\\#1286](https://github.com/doctrine/orm/pull/1286)\n Removing XDebug from non-coverage builds\n- [DDC-3546](https://github.com/doctrine/orm/issues/4363)\n -[\\#1289](https://github.com/doctrine/orm/pull/1289) Improve\n test suite\n- [DDC-3549](https://github.com/doctrine/orm/issues/4366)\n -[\\#1292](https://github.com/doctrine/orm/pull/1292) Mark\n getSelectConditionStatementColumnSQL method as private\n- [DDC-3588](https://github.com/doctrine/orm/issues/4409)\n -[\\#1314](https://github.com/doctrine/orm/pull/1314)\n DATE\\_ADD\n - Support for seconds\n- [DDC-3590](https://github.com/doctrine/orm/issues/4412)\n -[\\#1316](https://github.com/doctrine/orm/pull/1316) Allow\n to join non-public schema tables\n- [DDC-3594](https://github.com/doctrine/orm/issues/4416)\n -[\\#1319](https://github.com/doctrine/orm/pull/1319) travis:\n PHP 7.0 nightly added\n- [DDC-3607](https://github.com/doctrine/orm/issues/4431)\n -[\\#1326](https://github.com/doctrine/orm/pull/1326) Allow\n AssociationBuilder to set a relation as orphan removal\n- [DDC-3630](https://github.com/doctrine/orm/issues/4457)\n -[\\#1343](https://github.com/doctrine/orm/pull/1343) Support\n embeddables in partial object query expression\n [DDC-3621](https://github.com/doctrine/orm/issues/4447)\n- [DDC-2850](https://github.com/doctrine/orm/issues/3605)\n -Allow cascaded clearing of Entities associated to the indicated\n Entity\n\nBugfix\n------\n\n- [DDC-1624](https://github.com/doctrine/orm/issues/2265)\n -Locking CTI doesnt work on SQL Server\n- [DDC-2310](https://github.com/doctrine/orm/issues/3014)\n -Recent changes to DBAL SQL Server platform lock hinting breaks ORM\n SqlWalker in DQL queries with joins\n- [DDC-2352](https://github.com/doctrine/orm/issues/3059)\n -[\\#615](https://github.com/doctrine/orm/pull/615) Update\n SqlWalker.php\n- [DDC-2372](https://github.com/doctrine/orm/issues/3081)\n -[\\#632](https://github.com/doctrine/orm/pull/632) entity\n generator - ignore trait properties and methods\n- [DDC-2504](https://github.com/doctrine/orm/issues/3226)\n -[\\#696](https://github.com/doctrine/orm/pull/696) extra\n lazy joined test\n- [DDC-2559](https://github.com/doctrine/orm/issues/3285)\n -[\\#728](https://github.com/doctrine/orm/pull/728) Color\n message like the update tools\n- [DDC-2561](https://github.com/doctrine/orm/issues/3288)\n -[\\#729](https://github.com/doctrine/orm/pull/729) add\n missing hint about lifecycle callback\n- [DDC-2562](https://github.com/doctrine/orm/issues/3289)\n -[\\#730](https://github.com/doctrine/orm/pull/730) To avoid\n \"SpacingAfterParams\" error with PHPCS Symfony2 coding standard\n- [DDC-2566](https://github.com/doctrine/orm/issues/3293)\n -[\\#732](https://github.com/doctrine/orm/pull/732) Update\n working-with-associations.rst\n- [DDC-2568](https://github.com/doctrine/orm/issues/3295)\n -[\\#733](https://github.com/doctrine/orm/pull/733) Update\n Parser.php\n- [DDC-2572](https://github.com/doctrine/orm/issues/3300)\n -ResolveTargetEntityListener does not work as documented.\n- [DDC-2573](https://github.com/doctrine/orm/issues/3301)\n -[\\#735](https://github.com/doctrine/orm/pull/735) Fix proxy\n performance test\n- [DDC-2575](https://github.com/doctrine/orm/issues/3303)\n -Hydration bug\n- [DDC-2580](https://github.com/doctrine/orm/issues/3309)\n -[\\#739](https://github.com/doctrine/orm/pull/739) Fix\n DDC-2579\n- [DDC-2581](https://github.com/doctrine/orm/issues/3310)\n -[\\#740](https://github.com/doctrine/orm/pull/740)\n Synchronized support of FilterCollection with ODM by adding missing\n method\n- [DDC-2584](https://github.com/doctrine/orm/issues/3313)\n -[\\#743](https://github.com/doctrine/orm/pull/743) Added\n coverage to DDC-2524. Updated DDC-1719 to fix related DBAL bug.\n- [DDC-2588](https://github.com/doctrine/orm/issues/3317)\n -[\\#745](https://github.com/doctrine/orm/pull/745) Update\n basic-mapping.rst\n- [DDC-2591](https://github.com/doctrine/orm/issues/3321)\n -[\\#747](https://github.com/doctrine/orm/pull/747) fix some\n file mode 755-\\>644\n- [DDC-2592](https://github.com/doctrine/orm/issues/3322)\n -[\\#748](https://github.com/doctrine/orm/pull/748) Add hour\n to DATE\\_ADD and DATE\\_SUB\n- [DDC-2603](https://github.com/doctrine/orm/issues/3334)\n -[\\#751](https://github.com/doctrine/orm/pull/751) Added\n coverage for querying support during postLoad.\n- [DDC-2604](https://github.com/doctrine/orm/issues/3335)\n -[\\#752](https://github.com/doctrine/orm/pull/752) ORM side\n fixes.\n- [DDC-2616](https://github.com/doctrine/orm/issues/3348)\n -[\\#759](https://github.com/doctrine/orm/pull/759) Fixed out\n of sync code examples in getting-started.rst\n- [DDC-2624](https://github.com/doctrine/orm/issues/3357)\n -ManyToManyPersister fails to handle cloned PeristentCollections\n- [DDC-2652](https://github.com/doctrine/orm/issues/3388)\n -[\\#777](https://github.com/doctrine/orm/pull/777) Fixed\n typo in mapping documentation\n- [DDC-2653](https://github.com/doctrine/orm/issues/3389)\n -[\\#778](https://github.com/doctrine/orm/pull/778) Fixed\n typo in property mapping\n- [DDC-2654](https://github.com/doctrine/orm/issues/3390)\n -[\\#779](https://github.com/doctrine/orm/pull/779) Fixed\n grammar in custom data types\n- [DDC-2656](https://github.com/doctrine/orm/issues/3392)\n -[\\#780](https://github.com/doctrine/orm/pull/780)\n [DDC-2655](https://github.com/doctrine/orm/issues/3391)\n Don't let getOneOrNullResult throw NoResultException\n- [DDC-2668](https://github.com/doctrine/orm/issues/3405)\n -DQL TRIM function is not converted into TRIM SQL correctly\n- [DDC-2673](https://github.com/doctrine/orm/issues/3411)\n -[\\#785](https://github.com/doctrine/orm/pull/785) Update\n dql-custom-walkers.rst\n- [DDC-2676](https://github.com/doctrine/orm/issues/3414)\n -[\\#786](https://github.com/doctrine/orm/pull/786) Minor\n updates while reading the basic-mapping page\n- [DDC-2678](https://github.com/doctrine/orm/issues/3416)\n -[\\#787](https://github.com/doctrine/orm/pull/787) Update\n DDC719Test.php to be compatible with MsSQL\n- [DDC-2681](https://github.com/doctrine/orm/issues/3420)\n -[\\#790](https://github.com/doctrine/orm/pull/790) HHVM\n compatibility: func\\_get\\_args\n- [DDC-2682](https://github.com/doctrine/orm/issues/3421)\n -[\\#791](https://github.com/doctrine/orm/pull/791)\n Implemented \"contains\" operator for Criteria expressions\n- [DDC-2683](https://github.com/doctrine/orm/issues/3422)\n -[\\#792](https://github.com/doctrine/orm/pull/792)\n [DDC-2668](https://github.com/doctrine/orm/issues/3405)\n Fix trim leading zero string\n- [DDC-2689](https://github.com/doctrine/orm/issues/3428)\n -Doctrine ORM test suite failing on MySQL\n- [DDC-2690](https://github.com/doctrine/orm/issues/3430)\n -Doctrine ORM test suite failing on PostgresSQL\n- [DDC-2696](https://github.com/doctrine/orm/issues/3436)\n -[\\#795](https://github.com/doctrine/orm/pull/795) Update\n query-builder.rst\n- [DDC-2699](https://github.com/doctrine/orm/issues/3439)\n -[\\#797](https://github.com/doctrine/orm/pull/797) CS fixes\n- [DDC-2700](https://github.com/doctrine/orm/issues/3442)\n -[\\#798](https://github.com/doctrine/orm/pull/798)\n Identifier can be empty for MappedSuperclasses\n- [DDC-2702](https://github.com/doctrine/orm/issues/3444)\n -[\\#799](https://github.com/doctrine/orm/pull/799) remove\n unused test case\n- [DDC-2704](https://github.com/doctrine/orm/issues/3446)\n -When using Discriminator EntityManager\\#merge fails\n- [DDC-2706](https://github.com/doctrine/orm/issues/3448)\n -[\\#801](https://github.com/doctrine/orm/pull/801) Update\n SqlWalker.php fixed wrong GROUP BY clause on SQL Server platform\n- [DDC-2707](https://github.com/doctrine/orm/issues/3449)\n -[\\#802](https://github.com/doctrine/orm/pull/802) Respect\n unsigned fields when tables get converted to entities.\n- [DDC-2711](https://github.com/doctrine/orm/issues/3453)\n -[\\#803](https://github.com/doctrine/orm/pull/803) Appended\n newline to (newly) generated files for PSR2 compatibility\n- [DDC-2716](https://github.com/doctrine/orm/issues/3458)\n -[\\#808](https://github.com/doctrine/orm/pull/808) Second\n level cache\n- [DDC-2718](https://github.com/doctrine/orm/issues/3460)\n -[\\#809](https://github.com/doctrine/orm/pull/809) Fix\n DDC-1514 test\n- [DDC-2720](https://github.com/doctrine/orm/issues/3462)\n -[\\#811](https://github.com/doctrine/orm/pull/811) Update\n SingleScalarHydrator error message\n- [DDC-2722](https://github.com/doctrine/orm/issues/3464)\n -[\\#812](https://github.com/doctrine/orm/pull/812) [Doc] add\n direct links to dbal and dql documentation\n- [DDC-2728](https://github.com/doctrine/orm/issues/3470)\n -[\\#815](https://github.com/doctrine/orm/pull/815) Remove\n unused use statement\n- [DDC-2732](https://github.com/doctrine/orm/issues/3475)\n -[\\#816](https://github.com/doctrine/orm/pull/816) Options\n not respected for ID Fields in XML Mapping Driver\n- [DDC-2737](https://github.com/doctrine/orm/issues/3480)\n -[\\#817](https://github.com/doctrine/orm/pull/817) Removed\n \"minimum-stability\" : \"dev\" from composer.json\n- [DDC-2738](https://github.com/doctrine/orm/issues/3481)\n -[\\#818](https://github.com/doctrine/orm/pull/818) Clarified\n tutorial context in section introducing `orm:scehma-tool:*` commnads\n- [DDC-2740](https://github.com/doctrine/orm/issues/3484)\n -[\\#819](https://github.com/doctrine/orm/pull/819) Fixes a\n Fatal Error when using a subexpression in parenthesis\n- [DDC-2741](https://github.com/doctrine/orm/issues/3486)\n -[\\#820](https://github.com/doctrine/orm/pull/820) Added\n support for field options to FieldBuilder\n- [DDC-2750](https://github.com/doctrine/orm/issues/3495)\n -[\\#822](https://github.com/doctrine/orm/pull/822) DDC-2748\n DQL expression \"in\" not working with Collection\n- [DDC-2753](https://github.com/doctrine/orm/issues/3498)\n -[\\#824](https://github.com/doctrine/orm/pull/824)\n s/PostgreSQLPlatform/PostgreSqlPlatform/\n- [DDC-2757](https://github.com/doctrine/orm/issues/3502)\n -Manual transcation handling not possible when transaction fails,\n documentation gives wrong example\n- [DDC-2759](https://github.com/doctrine/orm/issues/3504)\n -ArrayHydration: Only first entity in OneToMany association is\n hydrated\n- [DDC-2760](https://github.com/doctrine/orm/issues/3506)\n -[\\#827](https://github.com/doctrine/orm/pull/827) Added a\n failing test case for DDC-2759.\n- [DDC-2764](https://github.com/doctrine/orm/issues/3510)\n -An orderBy on Criteria leads to DQL semantical error\n- [DDC-2765](https://github.com/doctrine/orm/issues/3511)\n -[\\#830](https://github.com/doctrine/orm/pull/830)\n [DDC-2764](https://github.com/doctrine/orm/issues/3510)\n Prefix criteria orderBy with rootAlias\n- [DDC-2769](https://github.com/doctrine/orm/issues/3515)\n -[\\#832](https://github.com/doctrine/orm/pull/832) Added\n \"readOnly: true\" to YAML reference\n- [DDC-2771](https://github.com/doctrine/orm/issues/3518)\n -[\\#834](https://github.com/doctrine/orm/pull/834) Add\n example use of repositoryClass in YAML\n- [DDC-2774](https://github.com/doctrine/orm/issues/3521)\n -[\\#836](https://github.com/doctrine/orm/pull/836) Update\n annotations-reference.rst\n- [DDC-2775](https://github.com/doctrine/orm/pull/837)\n -Bug with cascade remove\n- [DDC-2782](https://github.com/doctrine/orm/issues/3530)\n -[\\#842](https://github.com/doctrine/orm/pull/842) Added\n EntityManager query creation tests\n- [DDC-2790](https://github.com/doctrine/orm/issues/3539)\n -[\\#845](https://github.com/doctrine/orm/pull/845) Don't\n compute changeset for entities that are going to be deleted\n- [DDC-2792](https://github.com/doctrine/orm/issues/3541)\n -[\\#846](https://github.com/doctrine/orm/pull/846)\n joinColumn is not required in manyToMany\n- [DDC-2798](https://github.com/doctrine/orm/issues/3547)\n -[\\#849](https://github.com/doctrine/orm/pull/849) Error\n with Same Field, Multiple Values, Criteria and QueryBuilder\n- [DDC-2799](https://github.com/doctrine/orm/issues/3548)\n -[\\#850](https://github.com/doctrine/orm/pull/850) Event\n listener to programmatically attach entity listeners.\n- [DDC-2811](https://github.com/doctrine/orm/issues/3563)\n -[\\#854](https://github.com/doctrine/orm/pull/854) fix\n relative path to doctrine/common\n- [DDC-2812](https://github.com/doctrine/orm/issues/3564)\n -[\\#856](https://github.com/doctrine/orm/pull/856) Fix\n dependency for\n tests/Doctrine/Tests/ORM/Functional/ReferenceProxyTest.php\n- [DDC-2827](https://github.com/doctrine/orm/issues/3580)\n -[\\#864](https://github.com/doctrine/orm/pull/864) Updated\n parser to support aggegrate functions in null comparisons\n- [DDC-2831](https://github.com/doctrine/orm/issues/3584)\n -[\\#866](https://github.com/doctrine/orm/pull/866)\n Mentioning the 'refresh' cascading property in the documentation\n list\n- [DDC-2843](https://github.com/doctrine/orm/issues/3597)\n -SchemaTool update SQL always contains queries to set default value\n on columns, even if they haven't changed.\n- [DDC-2847](https://github.com/doctrine/orm/issues/3601)\n -[\\#871](https://github.com/doctrine/orm/pull/871) XCache\n cannot be flushed on the CLI -\\> for pretty much the same reason as\n APC\n- [DDC-2853](https://github.com/doctrine/orm/issues/3608)\n -[\\#873](https://github.com/doctrine/orm/pull/873) Try\n running unit tests on HHVM\n- [DDC-2855](https://github.com/doctrine/orm/issues/3610)\n -[\\#875](https://github.com/doctrine/orm/pull/875) Adding\n tests that confirm that DDC-2845 is fixed\n- [DDC-2856](https://github.com/doctrine/orm/issues/3611)\n -[\\#876](https://github.com/doctrine/orm/pull/876) Fixing\n wrong key for allowing HHVM failures\n- [DDC-2862](https://github.com/doctrine/orm/issues/3618)\n -When update cached entitiy, entity lost OneToOne relationship\n- [DDC-2866](https://github.com/doctrine/orm/issues/3622)\n -[\\#883](https://github.com/doctrine/orm/pull/883)\n [DDC-2862](https://github.com/doctrine/orm/issues/3618)\n Fix non initialized association proxy\n- [DDC-2867](https://github.com/doctrine/orm/issues/3623)\n -[\\#884](https://github.com/doctrine/orm/pull/884) [SLC] Fix\n cache misses using one-to-one inverse side\n- [DDC-2869](https://github.com/doctrine/orm/issues/3625)\n -[\\#886](https://github.com/doctrine/orm/pull/886)\n [DDC-1256](https://github.com/doctrine/orm/issues/1866)\n Fix applying ON/WITH conditions to first join in Class Table\n Inheritance\n- [DDC-2875](https://github.com/doctrine/orm/issues/3632)\n -[\\#890](https://github.com/doctrine/orm/pull/890)\n [DBAL-563] Add general IDENTITY generator type support for sequence\n emulating platforms\n- [DDC-2876](https://github.com/doctrine/orm/issues/3633)\n -[\\#891](https://github.com/doctrine/orm/pull/891) Allow to\n not generate extra use\n- [DDC-2878](https://github.com/doctrine/orm/issues/3635)\n -[\\#893](https://github.com/doctrine/orm/pull/893)\n autoGenerate arg from bool to int\n- [DDC-2880](https://github.com/doctrine/orm/issues/3638)\n -[\\#894](https://github.com/doctrine/orm/pull/894) Fix typos\n -QueryBuilder\n- [DDC-2884](https://github.com/doctrine/orm/issues/3641)\n -[\\#896](https://github.com/doctrine/orm/pull/896) Ensure\n elements preceed\n- [DDC-2885](https://github.com/doctrine/orm/issues/3642)\n -[\\#897](https://github.com/doctrine/orm/pull/897) Respected\n 'inheritanceType' at Entity level\n- [DDC-2889](https://github.com/doctrine/orm/issues/3646)\n -[\\#900](https://github.com/doctrine/orm/pull/900) Fix\n connection mock fetchColumn signature\n- [DDC-2890](https://github.com/doctrine/orm/issues/3648)\n -Paginator generates invalid sql for some dql with\n setUseOutputWalkers(false) and \\$fetchJoinCollection = true\n- [DDC-2903](https://github.com/doctrine/orm/issues/3662)\n -[\\#906](https://github.com/doctrine/orm/pull/906) removed\n erroneous tip\n- [DDC-2907](https://github.com/doctrine/orm/issues/3665)\n -[\\#907](https://github.com/doctrine/orm/pull/907)\n [DDC-1632](https://github.com/doctrine/orm/issues/2273)\n OneToMany Fetch eager\n- [DDC-2908](https://github.com/doctrine/orm/issues/3666)\n -[\\#908](https://github.com/doctrine/orm/pull/908)\n [DDC-2862](https://github.com/doctrine/orm/issues/3618)\n Fix lazy association load\n- [DDC-2913](https://github.com/doctrine/orm/issues/3672)\n -[\\#909](https://github.com/doctrine/orm/pull/909) Fix\n DatabaseDriverTest on SQL Server\n- [DDC-2914](https://github.com/doctrine/orm/issues/3673)\n -[\\#910](https://github.com/doctrine/orm/pull/910)\n [DDC-2310](https://github.com/doctrine/orm/issues/3014)\n Fix SQL generation on table lock hint capable platforms\n- [DDC-2916](https://github.com/doctrine/orm/issues/3675)\n -[\\#911](https://github.com/doctrine/orm/pull/911) fix\n foreach coding style\n- [DDC-2919](https://github.com/doctrine/orm/issues/3678)\n -LockMode::NONE evaluation inconsistencies in ORM\n- [DDC-2921](https://github.com/doctrine/orm/issues/3681)\n -[\\#912](https://github.com/doctrine/orm/pull/912) Avoid\n PersistentCollection::isEmpty() to fully load the collection.\n- [DDC-2931](https://github.com/doctrine/orm/issues/3692)\n -OneToOne self-referencing fails when loading referenced objects\n- [DDC-2933](https://github.com/doctrine/orm/issues/3694)\n -[\\#917](https://github.com/doctrine/orm/pull/917) DDC-2931\n- [DDC-2934](https://github.com/doctrine/orm/issues/3695)\n -[\\#918](https://github.com/doctrine/orm/pull/918) Fix use\n of function in OrderBy\n- [DDC-2935](https://github.com/doctrine/orm/issues/3696)\n -[\\#919](https://github.com/doctrine/orm/pull/919) tests for\n DDC-2890\n- [DDC-2937](https://github.com/doctrine/orm/issues/3700)\n -[\\#920](https://github.com/doctrine/orm/pull/920)\n SingleScalarHydrator reports ambiguous error.\n- [DDC-2943](https://github.com/doctrine/orm/issues/3705)\n -Paginator not work with second level cache in Doctrine 2.5\n- [DDC-2946](https://github.com/doctrine/orm/issues/3708)\n -[\\#926](https://github.com/doctrine/orm/pull/926)\n Feature/console em helper interface\n- [DDC-2947](https://github.com/doctrine/orm/issues/3709)\n -[\\#927](https://github.com/doctrine/orm/pull/927)\n s/EntityManager/EntityManagerInterface/ in a few places\n- [DDC-2948](https://github.com/doctrine/orm/issues/3710)\n -[\\#928](https://github.com/doctrine/orm/pull/928) Support\n PHPUnit 3.8+ Compatibility\n- [DDC-2952](https://github.com/doctrine/orm/issues/3715)\n -[\\#932](https://github.com/doctrine/orm/pull/932)\n [DDC-2919](https://github.com/doctrine/orm/issues/3678)\n Make lock mode usage consistent\n- [DDC-2956](https://github.com/doctrine/orm/issues/3719)\n -[\\#934](https://github.com/doctrine/orm/pull/934) faild\n test with multiple HINT\\_CUSTOM\\_TREE\\_WALKERS\n- [DDC-2957](https://github.com/doctrine/orm/issues/3720)\n -[\\#935](https://github.com/doctrine/orm/pull/935) Remove\n incorrect (outdated) validation for public fields in SchemaValidator\n- [DDC-2958](https://github.com/doctrine/orm/issues/3721)\n -[\\#936](https://github.com/doctrine/orm/pull/936) Making\n testing dependencies explicit\n- [DDC-2961](https://github.com/doctrine/orm/issues/3725)\n -[\\#938](https://github.com/doctrine/orm/pull/938) Missing\n join-tables added in example\n- [DDC-2967](https://github.com/doctrine/orm/issues/3731)\n -[\\#943](https://github.com/doctrine/orm/pull/943) Validate\n embeddables do not contain other embeddables.\n- [DDC-2968](https://github.com/doctrine/orm/issues/3732)\n -[\\#944](https://github.com/doctrine/orm/pull/944) Fixed\n InputOption modes\n- [DDC-2969](https://github.com/doctrine/orm/issues/3733)\n -[\\#945](https://github.com/doctrine/orm/pull/945) Fix CS\n- [DDC-2971](https://github.com/doctrine/orm/issues/3736)\n -[\\#947](https://github.com/doctrine/orm/pull/947) Cleaned\n up further unused imports.\n- [DDC-2974](https://github.com/doctrine/orm/issues/3739)\n -[\\#950](https://github.com/doctrine/orm/pull/950) Can cache\n empty collections\n- [DDC-2975](https://github.com/doctrine/orm/issues/3740)\n -[\\#951](https://github.com/doctrine/orm/pull/951) More\n informational entity not found exception\n- [DDC-2976](https://github.com/doctrine/orm/issues/3741)\n -[\\#952](https://github.com/doctrine/orm/pull/952) Add\n DB-level onDelete CASCADE example\n- [DDC-2989](https://github.com/doctrine/orm/issues/3753)\n -ORM should allow custom index names for foreign associations.\n- [DDC-2996](https://github.com/doctrine/orm/issues/3760)\n -UnitOfWork::recomputeSingleEntityChangeSet() will not add a new\n change set\n- [DDC-2997](https://github.com/doctrine/orm/issues/3761)\n -[\\#960](https://github.com/doctrine/orm/pull/960) allow\n passing EntityManagerInterface when creating a HelperSet\n- [DDC-2998](https://github.com/doctrine/orm/issues/3762)\n -[\\#961](https://github.com/doctrine/orm/pull/961)\n [DDC-2984](https://github.com/doctrine/orm/issues/3748)\n Provide TestCase to reproduce bug\n- [DDC-3002](https://github.com/doctrine/orm/issues/3769)\n -[\\#964](https://github.com/doctrine/orm/pull/964)\n [DDC-2943](https://github.com/doctrine/orm/issues/3705)\n [SLC] Disable slc for pagination queries\n- [DDC-3003](https://github.com/doctrine/orm/issues/3770)\n -[\\#965](https://github.com/doctrine/orm/pull/965) [SLC] Add\n support for criteria\n- [DDC-3008](https://github.com/doctrine/orm/issues/3774)\n -[\\#967](https://github.com/doctrine/orm/pull/967) [SLC] Add\n query builder options\n- [DDC-3009](https://github.com/doctrine/orm/issues/3775)\n -[\\#968](https://github.com/doctrine/orm/pull/968) Test: Add\n failing test\n- [DDC-3010](https://github.com/doctrine/orm/issues/3777)\n -[\\#969](https://github.com/doctrine/orm/pull/969) [Doc]\n added note about Criteria limits on PersistentCollection\n- [DDC-3012](https://github.com/doctrine/orm/issues/3779)\n -[\\#971](https://github.com/doctrine/orm/pull/971) [SLC] Fix\n query association proxy\n- [DDC-3013](https://github.com/doctrine/orm/issues/3780)\n -[\\#972](https://github.com/doctrine/orm/pull/972)\n Capitalize @GeneratedValue (annotations-reference.rst)\n- [DDC-3015](https://github.com/doctrine/orm/issues/3782)\n -[\\#974](https://github.com/doctrine/orm/pull/974) [SLC]\n Resolve association cache entry\n- [DDC-3018](https://github.com/doctrine/orm/issues/3786)\n -DQL \u201cNEW\u201d Operator and Literal type \"String\"\n- [DDC-3021](https://github.com/doctrine/orm/issues/3789)\n -[\\#976](https://github.com/doctrine/orm/pull/976) Add cache\n invalidation strategy to AbstractQuery\n- [DDC-3023](https://github.com/doctrine/orm/issues/3791)\n -[\\#977](https://github.com/doctrine/orm/pull/977) Fix wrong\n annotation\n- [DDC-3028](https://github.com/doctrine/orm/issues/3796)\n -[\\#978](https://github.com/doctrine/orm/pull/978)\n [DDC-2987](https://github.com/doctrine/orm/issues/3751)\n Enable empty prefixes for inlined embeddable\n- [DDC-3033](https://github.com/doctrine/orm/issues/3802)\n -Regression in computeChangeSets (ManyToMany relation)\n- [DDC-3038](https://github.com/doctrine/orm/issues/3807)\n -[\\#982](https://github.com/doctrine/orm/pull/982) Failing\n Test (since commit 53a5a48aed7d87aa1533c0bcbd72e41b686527d8)\n- [DDC-3041](https://github.com/doctrine/orm/issues/3811)\n -[\\#984](https://github.com/doctrine/orm/pull/984) Use\n boolean values for 'unique' attribute\n- [DDC-3042](https://github.com/doctrine/orm/issues/3812)\n -select issue field names with numbers\n- [DDC-3045](https://github.com/doctrine/orm/issues/3815)\n -SQL Injection in Persister API\n- [DDC-3047](https://github.com/doctrine/orm/issues/3817)\n -XML Exporter driver does not export association fetch-mode\n- [DDC-3049](https://github.com/doctrine/orm/issues/3819)\n -[\\#988](https://github.com/doctrine/orm/pull/988) Exporter\n support for association fetch modes\n- [DDC-3054](https://github.com/doctrine/orm/issues/3825)\n -[\\#991](https://github.com/doctrine/orm/pull/991) Ability\n to define custom functions with callback instead of class name\n- [DDC-3058](https://github.com/doctrine/orm/issues/3829)\n -[\\#993](https://github.com/doctrine/orm/pull/993) Update\n JoinColumn.php\n- [DDC-3060](https://github.com/doctrine/orm/issues/3832)\n -[\\#995](https://github.com/doctrine/orm/pull/995) Allow\n cascaded clearing of associated Entities\n- [DDC-3061](https://github.com/doctrine/orm/issues/3833)\n -[\\#996](https://github.com/doctrine/orm/pull/996)\n [DDC-3027](https://github.com/doctrine/orm/issues/3795)\n Embedded in MappedSuperclass\n- [DDC-3065](https://github.com/doctrine/orm/issues/3837)\n -Generated 'IN' clause doesn't handle 'null' values (needs to add\n 'IS NULL' check)\n- [DDC-3067](https://github.com/doctrine/orm/issues/3839)\n -[\\#999](https://github.com/doctrine/orm/pull/999) DDC-3065\n null value in in criteria support\n- [DDC-3069](https://github.com/doctrine/orm/issues/3841)\n -[\\#1000](https://github.com/doctrine/orm/pull/1000)\n [DDC-3068](https://github.com/doctrine/orm/issues/3840)\n EntityManager::find accept array of object as id\n- [DDC-3071](https://github.com/doctrine/orm/issues/3844)\n -[\\#1002](https://github.com/doctrine/orm/pull/1002) Fixed\n wrongly initialized property.\n- [DDC-3074](https://github.com/doctrine/orm/issues/3847)\n -[\\#1004](https://github.com/doctrine/orm/pull/1004) Removed\n all useless occurrence of require\\_once TestInit.php\n- [DDC-3075](https://github.com/doctrine/orm/issues/3848)\n -[\\#1005](https://github.com/doctrine/orm/pull/1005) Added\n support of the subselect expressions into NEW expressions\n- [DDC-3078](https://github.com/doctrine/orm/issues/3851)\n -Doctrine::\\_\\_construct is in an interface\n- [DDC-3080](https://github.com/doctrine/orm/issues/3854)\n -[\\#1008](https://github.com/doctrine/orm/pull/1008)\n DDC-3078 SLC Cache interface ctor removal\n- [DDC-3081](https://github.com/doctrine/orm/issues/3855)\n -[\\#1009](https://github.com/doctrine/orm/pull/1009) HHVM\n compatibility\n- [DDC-3082](https://github.com/doctrine/orm/issues/3856)\n -[\\#1010](https://github.com/doctrine/orm/pull/1010) Fixed\n validation message\n- [DDC-3085](https://github.com/doctrine/orm/issues/3859)\n -NULL comparison are not supported for result variables in the\n HAVING clause\n- [DDC-3092](https://github.com/doctrine/orm/issues/3867)\n -[\\#1012](https://github.com/doctrine/orm/pull/1012) Ddc\n 3078 slc cache interface ctor removal\n- [DDC-3093](https://github.com/doctrine/orm/issues/3868)\n -[\\#1013](https://github.com/doctrine/orm/pull/1013) Remove\n SimpleXmlElement hack\n- [DDC-3095](https://github.com/doctrine/orm/issues/3870)\n -[\\#1014](https://github.com/doctrine/orm/pull/1014) Update\n second level cache doc\n- [DDC-3100](https://github.com/doctrine/orm/issues/3876)\n -[\\#1018](https://github.com/doctrine/orm/pull/1018)\n DBAL-878 Wrong mapping type\n- [DDC-3103](https://github.com/doctrine/orm/issues/3879)\n -Is embedded class information in ClassMetadata is not stored when\n serializing.\n- [DDC-3106](https://github.com/doctrine/orm/issues/3882)\n -[\\#1023](https://github.com/doctrine/orm/pull/1023)\n [DDC-3027](https://github.com/doctrine/orm/issues/3795)\n Avoid duplicated mapping using Embedded in MappedSuperclass\n- [DDC-3107](https://github.com/doctrine/orm/issues/3883)\n -[\\#1024](https://github.com/doctrine/orm/pull/1024)\n [Persister] Remove the insertSql cache\n- [DDC-3108](https://github.com/doctrine/orm/issues/3884)\n -Criteria cannot reference a joined tables' fields when used with an\n ORM QueryBuilder\n- [DDC-3118](https://github.com/doctrine/orm/issues/3894)\n -[\\#1028](https://github.com/doctrine/orm/pull/1028) Add\n method getAssociationsByType to ClassMetadata\n- [DDC-3120](https://github.com/doctrine/orm/issues/3897)\n -Warning: Erroneous data format for unserializing PHP5.6+\n- [DDC-3123](https://github.com/doctrine/orm/issues/3898)\n -Extra updates are not cleaned after execution\n- [DDC-3124](https://github.com/doctrine/orm/issues/3901)\n -[\\#1030](https://github.com/doctrine/orm/pull/1030)\n DDC-3123 extra updates cleanup\n- [DDC-3129](https://github.com/doctrine/orm/issues/3906)\n -[\\#1032](https://github.com/doctrine/orm/pull/1032) Add\n support for optimized contains\n- [DDC-3143](https://github.com/doctrine/orm/issues/3922)\n -[\\#1041](https://github.com/doctrine/orm/pull/1041) Allow\n all EntityManagerInterface implementations\n- [DDC-3151](https://github.com/doctrine/orm/issues/3930)\n -[\\#1048](https://github.com/doctrine/orm/pull/1048) Fix\n typo in exception message\n- [DDC-3152](https://github.com/doctrine/orm/issues/3931)\n -Generating methods does not check for existing methods with\n different case\n- [DDC-3160](https://github.com/doctrine/orm/issues/3940)\n -Regression in reComputeSingleEntityChangeset\n- [DDC-3177](https://github.com/doctrine/orm/issues/3958)\n -[\\#1063](https://github.com/doctrine/orm/pull/1063)\n singularize variable name on add/remove methods for EntityGenerator\n- [DDC-3190](https://github.com/doctrine/orm/issues/3973)\n -[\\#1071](https://github.com/doctrine/orm/pull/1071)\n Setup::createConfiguration breaks Cache interface contract\n- [DDC-3191](https://github.com/doctrine/orm/issues/3974)\n -[\\#1072](https://github.com/doctrine/orm/pull/1072) Fix\n attempt of traversing bool in FileLockRegion\n- [DDC-3192](https://github.com/doctrine/orm/issues/3975)\n -Custom types do not get converted to PHP Value when result is\n gotten from custom query\n- [DDC-3198](https://github.com/doctrine/orm/issues/3981)\n -[\\#1075](https://github.com/doctrine/orm/pull/1075) Fixed\n query cache id generation: added platform to hash\n- [DDC-3199](https://github.com/doctrine/orm/issues/3982)\n -[\\#1076](https://github.com/doctrine/orm/pull/1076) Fix\n switch non-uniform syntax\n- [DDC-3210](https://github.com/doctrine/orm/issues/3996)\n -[\\#1080](https://github.com/doctrine/orm/pull/1080)\n possible fix for DDC-2021\n- [DDC-3214](https://github.com/doctrine/orm/issues/4000)\n -[\\#1082](https://github.com/doctrine/orm/pull/1082) added\n more informative error messages when invalid parameter count\n- [DDC-3223](https://github.com/doctrine/orm/issues/4010)\n -Failing test (get id return string type)\n- [DDC-3225](https://github.com/doctrine/orm/issues/4012)\n -[\\#1087](https://github.com/doctrine/orm/pull/1087) Remove\n the error control operator\n- [DDC-3227](https://github.com/doctrine/orm/issues/4014)\n -[\\#1088](https://github.com/doctrine/orm/pull/1088) Fix the\n composer autoload paths for the doctrine CLT\n- [DDC-3233](https://github.com/doctrine/orm/issues/4021)\n -[\\#1092](https://github.com/doctrine/orm/pull/1092)\n Arbitrary Join count walkers solution\n- [DDC-3237](https://github.com/doctrine/orm/issues/4025)\n -[\\#1096](https://github.com/doctrine/orm/pull/1096) Changes\n for grammar and clarity\n- [DDC-3239](https://github.com/doctrine/orm/pull/1097)\n -[\\#1097](https://github.com/doctrine/orm/pull/1097)\n `expandParameters`/`getType` in BasicEntityPersister seems to really\n cover just few cases\n- [DDC-3240](https://github.com/doctrine/orm/issues/4028)\n -[\\#1098](https://github.com/doctrine/orm/pull/1098)\n \\#DDC-1590: Fix Inheritance in Code-Generation\n- [DDC-3254](https://github.com/doctrine/orm/issues/4043)\n -[\\#1111](https://github.com/doctrine/orm/pull/1111) Fix\n inheritance hierarchy wrong exception message\n- [DDC-3269](https://github.com/doctrine/orm/issues/4058)\n -[\\#1120](https://github.com/doctrine/orm/pull/1120)\n [DDC-3205](https://github.com/doctrine/orm/issues/3990)\n Metadata info\n- [DDC-3272](https://github.com/doctrine/orm/issues/4062)\n -EntityGenerator writes 'MappedSuperClass' instead of\n 'MappedSuperclass'\n- [DDC-3278](https://github.com/doctrine/orm/issues/4068)\n -[\\#1123](https://github.com/doctrine/orm/pull/1123) Fixed\n the structure of the reverse-engineered mapping\n- [DDC-3283](https://github.com/doctrine/orm/issues/4074)\n -[\\#1125](https://github.com/doctrine/orm/pull/1125) Update\n improving-performance.rst\n- [DDC-3288](https://github.com/doctrine/orm/issues/4079)\n -[\\#1126](https://github.com/doctrine/orm/pull/1126) Fixed\n new line in docblock\n- [DDC-3293](https://github.com/doctrine/orm/issues/4085)\n -XML Mappings disallow disabling column prefix for embeddables\n- [DDC-3302](https://github.com/doctrine/orm/issues/4096)\n -[\\#1132](https://github.com/doctrine/orm/pull/1132)\n DDC-3272 entity generator mapped superclass casing\n- [DDC-3310](https://github.com/doctrine/orm/issues/4105)\n -[\\#1138](https://github.com/doctrine/orm/pull/1138) Join\n column index names\n- [DDC-3318](https://github.com/doctrine/orm/issues/4113)\n -[\\#1143](https://github.com/doctrine/orm/pull/1143) Fixed a\n bug so that a versioned entity with a oneToOne id can be created\n- [DDC-3322](https://github.com/doctrine/orm/issues/4118)\n -[\\#1146](https://github.com/doctrine/orm/pull/1146) Allow\n orderBy to reference associations\n- [DDC-3336](https://github.com/doctrine/orm/issues/4133)\n -Undefined property: Doctrine::\\$field\n- [DDC-3341](https://github.com/doctrine/orm/issues/4139)\n -SessionValidator gives an error message on orderBy association, but\n it is no error.\n- [DDC-3343](https://github.com/doctrine/orm/issues/4141)\n -`PersistentCollection::removeElement` schedules an entity for\n deletion when relationship is EXTRA\\_LAZY, with `orphanRemoval`\n false.\n- [DDC-3346](https://github.com/doctrine/orm/issues/4144)\n -findOneBy returns an object with partial collection for the\n properties with mapping oneToMany/Fetch Eager\n- [DDC-3350](https://github.com/doctrine/orm/issues/4149)\n -[\\#1160](https://github.com/doctrine/orm/pull/1160) \\#1159\n -multiple entity managers per repository factory should be supported\n- [DDC-3355](https://github.com/doctrine/orm/issues/4154)\n -[\\#1164](https://github.com/doctrine/orm/pull/1164)\n [QueryBuilder] Remove unused method parameters to run on HHVM/PHP7\n- [DDC-3358](https://github.com/doctrine/orm/issues/4157)\n -[\\#1166](https://github.com/doctrine/orm/pull/1166) Fixing\n HHVM+XSD validation tests as of documented HHVM inconsistencies\n- [DDC-3368](https://github.com/doctrine/orm/issues/4168)\n -[\\#1172](https://github.com/doctrine/orm/pull/1172) Don't\n initialize detached proxies when merging them.\n- [DDC-3370](https://github.com/doctrine/orm/issues/4171)\n -[\\#1173](https://github.com/doctrine/orm/pull/1173) Fix\n merging of entities with associations to identical entities.\n- [DDC-3378](https://github.com/doctrine/orm/issues/4179)\n -[\\#1176](https://github.com/doctrine/orm/pull/1176) Support\n merging entities with composite identities defined through to-one\n associations\n- [DDC-3379](https://github.com/doctrine/orm/issues/4180)\n -[\\#1177](https://github.com/doctrine/orm/pull/1177) Ensure\n metadata cache is not ArrayCache in production\n- [DDC-3380](https://github.com/doctrine/orm/issues/4182)\n -[\\#1178](https://github.com/doctrine/orm/pull/1178) Fixing\n associations using UUIDs\n- [DDC-3387](https://github.com/doctrine/orm/issues/4189)\n -[\\#1182](https://github.com/doctrine/orm/pull/1182) \\#1086\n identifier type in proxies\n- [DDC-3394](https://github.com/doctrine/orm/issues/4197)\n -UOW CreateEntity failure with zerofill columns\n- [DDC-3404](https://github.com/doctrine/orm/issues/4208)\n -[\\#1188](https://github.com/doctrine/orm/pull/1188) Fixed\n counting exception\n- [DDC-3419](https://github.com/doctrine/orm/issues/4224)\n -[\\#1196](https://github.com/doctrine/orm/pull/1196) Inherit\n indexes from mapped superclass\n- [DDC-3425](https://github.com/doctrine/orm/issues/4231)\n -[\\#1202](https://github.com/doctrine/orm/pull/1202) Checks\n key exists rather than isset\n- [DDC-3427](https://github.com/doctrine/orm/issues/4233)\n -Doctrineexplicitly accepts EntityManager\n- [DDC-3428](https://github.com/doctrine/orm/issues/4234)\n -[\\#1204](https://github.com/doctrine/orm/pull/1204) Fix\n sequence-generator in MetaData exporter for XML Driver.\n- [DDC-3429](https://github.com/doctrine/orm/issues/4235)\n -[\\#1205](https://github.com/doctrine/orm/pull/1205) Hotfix\n -\\#1200 symfony 2.7 deprecation fixes\n- [DDC-3430](https://github.com/doctrine/orm/issues/4237)\n -[\\#1206](https://github.com/doctrine/orm/pull/1206)\n matching should not change critera\n- [DDC-3431](https://github.com/doctrine/orm/issues/4238)\n -[\\#1207](https://github.com/doctrine/orm/pull/1207)\n Embedded classes reflection new instance creation with internal PHP\n classes\n- [DDC-3432](https://github.com/doctrine/orm/issues/4239)\n -[\\#1208](https://github.com/doctrine/orm/pull/1208)\n DDC-3427\n - class metadata factory should accept `EntityManagerInterface`\n instances\n- [DDC-3433](https://github.com/doctrine/orm/issues/4240)\n -[\\#1210](https://github.com/doctrine/orm/pull/1210)\n DDC-3336\n - undefined property with paginator walker and scalar expression in\n ORDER BY clause\n- [DDC-3434](https://github.com/doctrine/orm/issues/4241)\n -LimitSubqueryOutputWalker does not retain correct ORDER BY\n expression fields when dealing with HIDDEN sort fields\n- [DDC-3435](https://github.com/doctrine/orm/issues/4242)\n -[\\#1211](https://github.com/doctrine/orm/pull/1211)\n DDC-3434\n - paginator ignores `HIDDEN` fields in `ORDER BY` query\n- [DDC-3436](https://github.com/doctrine/orm/issues/4243)\n -[\\#1212](https://github.com/doctrine/orm/pull/1212)\n [DDC-3108](https://github.com/doctrine/orm/issues/3884)\n Fix regression where join aliases were no longer accessible in\n Criteria expressions\n- [DDC-3437](https://github.com/doctrine/orm/issues/4244)\n -[\\#1213](https://github.com/doctrine/orm/pull/1213) fix\n instantiation of embedded object in ReflectionEmbeddedProperty\n- [DDC-3439](https://github.com/doctrine/orm/issues/4246)\n -[\\#1216](https://github.com/doctrine/orm/pull/1216) test\n XML export driver, the field options, for \\#1214\n- [DDC-3452](https://github.com/doctrine/orm/issues/4261)\n -[\\#1222](https://github.com/doctrine/orm/pull/1222)\n Embeddables in metadata builder\n- [DDC-3454](https://github.com/doctrine/orm/issues/4263)\n -[\\#1224](https://github.com/doctrine/orm/pull/1224) Updated\n setParameters function for not replace all parameters\n- [DDC-3466](https://github.com/doctrine/orm/issues/4276)\n -[\\#1233](https://github.com/doctrine/orm/pull/1233) [Minor]\n Refactoring to avoid duplicate code\n- [DDC-3470](https://github.com/doctrine/orm/issues/4280)\n -[\\#1235](https://github.com/doctrine/orm/pull/1235)\n Consistent return type confirming with interface\n- [DDC-3478](https://github.com/doctrine/orm/issues/4288)\n -[\\#1239](https://github.com/doctrine/orm/pull/1239) Fix\n index duplication for unique association join columns\n- [DDC-3482](https://github.com/doctrine/orm/issues/4293)\n -[\\#1242](https://github.com/doctrine/orm/pull/1242)\n Attempting to lock a proxy object fails as UOW doesn't init proxy\n first\n- [DDC-3493](https://github.com/doctrine/orm/issues/4305)\n -New (PHP 5.5) \"class\" keyword - wrong parsing by EntityGenerator\n- [DDC-3494](https://github.com/doctrine/orm/issues/4306)\n -[\\#1250](https://github.com/doctrine/orm/pull/1250) Test\n case for \"class\" keyword\n- [DDC-3502](https://github.com/doctrine/orm/issues/4316)\n -[\\#1256](https://github.com/doctrine/orm/pull/1256)\n DDC-3493\n - fixed EntityGenerator parsing for php 5.5 \"::class\" syntax\n- [DDC-3506](https://github.com/doctrine/orm/issues/4320)\n -[\\#1259](https://github.com/doctrine/orm/pull/1259) Hotfix:\n Cache region should not mutate injected cache instance settings\n- [DDC-3513](https://github.com/doctrine/orm/issues/4327)\n -[\\#1262](https://github.com/doctrine/orm/pull/1262) Fixes\n the broken DQL command\n- [DDC-3517](https://github.com/doctrine/orm/issues/4331)\n -[\\#1265](https://github.com/doctrine/orm/pull/1265) Fix\n error undefined index \"targetEntity\" in persister\n- [DDC-3524](https://github.com/doctrine/orm/issues/4339)\n -[\\#1272](https://github.com/doctrine/orm/pull/1272)\n [DDC-2704](https://github.com/doctrine/orm/issues/3446)\n -merge inherited transient properties - merge properties into\n uninitialized proxies\n- [DDC-3534](https://github.com/doctrine/orm/issues/4352)\n -[\\#1280](https://github.com/doctrine/orm/pull/1280)\n [DDC-3346](https://github.com/doctrine/orm/issues/4144)\n \\#1277 find one with eager loads is failing\n- [DDC-3536](https://github.com/doctrine/orm/issues/4349)\n -[\\#1281](https://github.com/doctrine/orm/pull/1281)\n Hotfix/\\#1169 extra lazy one to many should not delete referenced\n entities\n- [DDC-3538](https://github.com/doctrine/orm/issues/4355)\n -[\\#1283](https://github.com/doctrine/orm/pull/1283) \\#1267\n -order by broken in pagination logic (reverts \\#1220)\n- [DDC-3544](https://github.com/doctrine/orm/issues/4361)\n -[\\#1288](https://github.com/doctrine/orm/pull/1288) Hotfix\n -\\#1169 - extra lazy one to many must be no-op when not doing orphan\n removal\n- [DDC-3551](https://github.com/doctrine/orm/issues/4369)\n -[\\#1294](https://github.com/doctrine/orm/pull/1294) Avoid\n Connection error when calling ClassMetadataFactor::getAllMetadata()\n- [DDC-3554](https://github.com/doctrine/orm/issues/4372)\n -[\\#1295](https://github.com/doctrine/orm/pull/1295) Fix\n join when recreation of query from parts.\n- [DDC-3564](https://github.com/doctrine/orm/issues/4383)\n -[\\#1301](https://github.com/doctrine/orm/pull/1301) Add\n failing test with ToOne SL2 association\n- [DDC-3566](https://github.com/doctrine/orm/issues/4385)\n -[\\#1302](https://github.com/doctrine/orm/pull/1302) Store\n column values of not cache-able associations\n- [DDC-3585](https://github.com/doctrine/orm/issues/4406)\n -[\\#1311](https://github.com/doctrine/orm/pull/1311)\n [DDC-3582](https://github.com/doctrine/orm/issues/4403)\n Wrong class is instantiated when using nested embeddables\n- [DDC-3586](https://github.com/doctrine/orm/issues/4407)\n -[\\#1312](https://github.com/doctrine/orm/pull/1312) Add\n proper pluralization into UpdateCommand\n- [DDC-3587](https://github.com/doctrine/orm/issues/4408)\n -[\\#1313](https://github.com/doctrine/orm/pull/1313) Added\n programmatical support to define indexBy on root aliases.\n- [DDC-3597](https://github.com/doctrine/orm/issues/4419)\n -[\\#1321](https://github.com/doctrine/orm/pull/1321)\n embeddedClasses support in mapped superclasses\n- [DDC-3606](https://github.com/doctrine/orm/issues/4430)\n -[\\#1325](https://github.com/doctrine/orm/pull/1325) fixed\n PostgreSQL and Oracle pagination issues\n- [DDC-3608](https://github.com/doctrine/orm/issues/4432)\n -[\\#1327](https://github.com/doctrine/orm/pull/1327)\n Properly generate default value from yml & xml mapping\n- [DDC-3616](https://github.com/doctrine/orm/issues/4441)\n -[\\#1333](https://github.com/doctrine/orm/pull/1333) Allow\n DateTimeImmutable as parameter value\n- [DDC-3619](https://github.com/doctrine/orm/issues/4444)\n -spl\\_object\\_hash collision\n- [DDC-3622](https://github.com/doctrine/orm/issues/4448)\n -[\\#1336](https://github.com/doctrine/orm/pull/1336) Fix UoW\n warning with custom id object types\n- [DDC-3623](https://github.com/doctrine/orm/issues/4449)\n -[\\#1337](https://github.com/doctrine/orm/pull/1337)\n Paginator OrderBy fix take 2\n- [DDC-3624](https://github.com/doctrine/orm/issues/4450)\n -[\\#1338](https://github.com/doctrine/orm/pull/1338)\n [DDC-3619](https://github.com/doctrine/orm/issues/4444)\n Update identityMap when entity gets managed again\n- [DDC-3625](https://github.com/doctrine/orm/issues/4451)\n -[\\#1339](https://github.com/doctrine/orm/pull/1339)\n [DDC-2224](https://github.com/doctrine/orm/issues/2922)\n Honor convertToDatabaseValueSQL() in DQL query parameters\n- [DDC-3629](https://github.com/doctrine/orm/issues/4455)\n -[\\#1342](https://github.com/doctrine/orm/pull/1342)\n Paginator functional tests\n- [DDC-3631](https://github.com/doctrine/orm/issues/4458)\n -[\\#1344](https://github.com/doctrine/orm/pull/1344) Fix\n tests for SLC console commands failing due to console output\n decoration\n- [DDC-3632](https://github.com/doctrine/orm/issues/4459)\n -[\\#1345](https://github.com/doctrine/orm/pull/1345) Fix\n crashes in ConvertMappingCommand and GenerateEntitiesCommand...\n- [DDC-3634](https://github.com/doctrine/orm/issues/4461)\n -[\\#1346](https://github.com/doctrine/orm/pull/1346) Fix:\n generated IDs are converted to integer\n- [DDC-3641](https://github.com/doctrine/orm/issues/4469)\n -[\\#1350](https://github.com/doctrine/orm/pull/1350)\n Assigned default value to array\n- [DDC-3643](https://github.com/doctrine/orm/issues/4471)\n -[\\#1352](https://github.com/doctrine/orm/pull/1352) fix\n EntityGenerator RegenerateEntityIfExists\n- [DDC-3645](https://github.com/doctrine/orm/issues/4473)\n -[\\#1353](https://github.com/doctrine/orm/pull/1353)\n Paginator fixes take3\n- [DDC-3650](https://github.com/doctrine/orm/issues/4479)\n -[\\#1357](https://github.com/doctrine/orm/pull/1357) Drop\n useless execution bit\n\nDocumentation\n-------------\n\n- [DDC-2510](https://github.com/doctrine/orm/issues/3233)\n -[\\#700](https://github.com/doctrine/orm/pull/700) Update\n getting-started.rst\n- [DDC-2511](https://github.com/doctrine/orm/issues/3234)\n -[\\#701](https://github.com/doctrine/orm/pull/701)\n list\\_bugs.php needs to call to getters for protected vars\n- [DDC-2549](https://github.com/doctrine/orm/issues/3274)\n -[\\#721](https://github.com/doctrine/orm/pull/721) Updated\n batch-processing link extension\n- [DDC-2553](https://github.com/doctrine/orm/issues/3280)\n -[\\#723](https://github.com/doctrine/orm/pull/723) Remove\n extra semicolon before -\\>setParameter() calls\n- [DDC-2571](https://github.com/doctrine/orm/issues/3299)\n -[\\#734](https://github.com/doctrine/orm/pull/734) Cleaned\n up documentation\n- [DDC-2620](https://github.com/doctrine/orm/issues/3353)\n -[\\#762](https://github.com/doctrine/orm/pull/762) YAML\n mapping documentation of uniqueConstraint\n- [DDC-2755](https://github.com/doctrine/orm/issues/3500)\n -[\\#825](https://github.com/doctrine/orm/pull/825) Spelling\n fix\n- [DDC-2777](https://github.com/doctrine/orm/issues/3524)\n -[\\#838](https://github.com/doctrine/orm/pull/838) Spelling\n fix\n- [DDC-2778](https://github.com/doctrine/orm/issues/3525)\n -[\\#839](https://github.com/doctrine/orm/pull/839) Spelling\n fix\n- [DDC-2801](https://github.com/doctrine/orm/issues/3552)\n -[\\#851](https://github.com/doctrine/orm/pull/851)\n Documentation about how to use INSTANCE OF in inheritance\n- [DDC-2819](https://github.com/doctrine/orm/issues/3571)\n -[\\#860](https://github.com/doctrine/orm/pull/860) Mention\n SQL Anywhere in basic mapping documentation\n- [DDC-2821](https://github.com/doctrine/orm/issues/3574)\n -[\\#862](https://github.com/doctrine/orm/pull/862) Added a\n note about changing the fetch mode for to-many relations\n- [DDC-2834](https://github.com/doctrine/orm/issues/3587)\n -[\\#868](https://github.com/doctrine/orm/pull/868) Added\n documentation section for Memcached\n- [DDC-2846](https://github.com/doctrine/orm/issues/3600)\n -[\\#870](https://github.com/doctrine/orm/pull/870)\n Documenting interface methods (based on entity manager)\n- [DDC-2848](https://github.com/doctrine/orm/issues/3602)\n -[\\#872](https://github.com/doctrine/orm/pull/872) Doctrine\n 2.4 now supports SQLite ALTER TABLE\n- [DDC-2873](https://github.com/doctrine/orm/issues/3630)\n -[\\#888](https://github.com/doctrine/orm/pull/888) Add an\n example to doc of YAML mapping\n- [DDC-2887](https://github.com/doctrine/orm/issues/3644)\n -[\\#898](https://github.com/doctrine/orm/pull/898) Added\n note to STI\n- [DDC-2925](https://github.com/doctrine/orm/issues/3685)\n -[\\#913](https://github.com/doctrine/orm/pull/913) Added\n exception class names\n- [DDC-2928](https://github.com/doctrine/orm/issues/3688)\n -[\\#915](https://github.com/doctrine/orm/pull/915) Improved\n DQL's \"new\" operator documentation\n- [DDC-2963](https://github.com/doctrine/orm/issues/3727)\n -[\\#940](https://github.com/doctrine/orm/pull/940) Fixed\n typo & horizontal scrolling\n- [DDC-2979](https://github.com/doctrine/orm/issues/3742)\n -[\\#953](https://github.com/doctrine/orm/pull/953) Update\n doc with latest news about extra lazy assoc\n- [DDC-2985](https://github.com/doctrine/orm/issues/3749)\n -[\\#955](https://github.com/doctrine/orm/pull/955) iteration\n risk note\n- [DDC-3019](https://github.com/doctrine/orm/issues/3785)\n -[\\#975](https://github.com/doctrine/orm/pull/975) Added\n info about automatic discriminator map\n- [DDC-3048](https://github.com/doctrine/orm/issues/3818)\n -[\\#987](https://github.com/doctrine/orm/pull/987) Fixes\n typo in dql-doctrine-query-language.rst\n- [DDC-3053](https://github.com/doctrine/orm/issues/3824)\n -[\\#990](https://github.com/doctrine/orm/pull/990) Typo in\n documentation\n- [DDC-3057](https://github.com/doctrine/orm/issues/3828)\n -[\\#992](https://github.com/doctrine/orm/pull/992) Fixed\n typos\n- [DDC-3059](https://github.com/doctrine/orm/issues/3830)\n -[\\#994](https://github.com/doctrine/orm/pull/994) Update\n EntityGenerator comment\n- [DDC-3073](https://github.com/doctrine/orm/issues/3846)\n -@Column options\n- [DDC-3077](https://github.com/doctrine/orm/issues/3850)\n -[\\#1007](https://github.com/doctrine/orm/pull/1007) Minor\n dockblock change\n- [DDC-3086](https://github.com/doctrine/orm/issues/3860)\n -[\\#1011](https://github.com/doctrine/orm/pull/1011) Single\n quotes can't nest\n- [DDC-3097](https://github.com/doctrine/orm/issues/3872)\n -[\\#1015](https://github.com/doctrine/orm/pull/1015) Add\n ExpressionBuilder::contains() to docs\n- [DDC-3111](https://github.com/doctrine/orm/issues/3888)\n -[\\#1025](https://github.com/doctrine/orm/pull/1025) Removed\n duplicate entry in documentation TOC.\n- [DDC-3127](https://github.com/doctrine/orm/issues/3904)\n -[\\#1031](https://github.com/doctrine/orm/pull/1031)\n Documentation for \\#991\n- [DDC-3131](https://github.com/doctrine/orm/issues/3909)\n -[\\#1034](https://github.com/doctrine/orm/pull/1034) Update\n caching.rst\n- [DDC-3139](https://github.com/doctrine/orm/issues/3917)\n -[\\#1038](https://github.com/doctrine/orm/pull/1038) Add\n documentation for the `HIDDEN` keyword in DQL\n- [DDC-3140](https://github.com/doctrine/orm/issues/3919)\n -[\\#1039](https://github.com/doctrine/orm/pull/1039) Add yml\n example to single table inheritance\n- [DDC-3144](https://github.com/doctrine/orm/issues/3924)\n -[\\#1042](https://github.com/doctrine/orm/pull/1042) Fix\n second level cache doc\n- [DDC-3145](https://github.com/doctrine/orm/issues/3923)\n -[\\#1044](https://github.com/doctrine/orm/pull/1044) Use of\n -\\>andWhere() whithout any -\\>where() before is valid\n- [DDC-3166](https://github.com/doctrine/orm/issues/3946)\n -[\\#1058](https://github.com/doctrine/orm/pull/1058) Drop\n Unicode character\n- [DDC-3168](https://github.com/doctrine/orm/issues/3948)\n -[\\#1059](https://github.com/doctrine/orm/pull/1059) fix\n spacing for yaml example\n- [DDC-3185](https://github.com/doctrine/orm/issues/3967)\n -[\\#1068](https://github.com/doctrine/orm/pull/1068) Fix\n typo in documentation\n- [DDC-3216](https://github.com/doctrine/orm/issues/4002)\n -[\\#1083](https://github.com/doctrine/orm/pull/1083)\n [DDC-3073](https://github.com/doctrine/orm/issues/3846)\n Add documentation about how to map column options\n- [DDC-3217](https://github.com/doctrine/orm/issues/4003)\n -[\\#1084](https://github.com/doctrine/orm/pull/1084) Update\n advanced-field-value-conversion-using-custom-mapping-types.rst\n- [DDC-3253](https://github.com/doctrine/orm/issues/4042)\n -[\\#1110](https://github.com/doctrine/orm/pull/1110) Changed\n table name to be more appropriate.\n- [DDC-3261](https://github.com/doctrine/orm/issues/4050)\n -Bad link in 34.3 Advanced Configuration - Connection Options\n- [DDC-3262](https://github.com/doctrine/orm/issues/4051)\n -[\\#1115](https://github.com/doctrine/orm/pull/1115) Fix\n wrong variable name\n- [DDC-3266](https://github.com/doctrine/orm/issues/4055)\n -[\\#1116](https://github.com/doctrine/orm/pull/1116)\n [DDC-3265](https://github.com/doctrine/orm/issues/4054)\n Fix DocBlock\n- [DDC-3292](https://github.com/doctrine/orm/issues/4084)\n -[\\#1127](https://github.com/doctrine/orm/pull/1127)\n Document embeddables column prefixing\n- [DDC-3324](https://github.com/doctrine/orm/issues/4120)\n -[\\#1147](https://github.com/doctrine/orm/pull/1147)\n Extended the docs for mapping attributes precision and scale\n- [DDC-3326](https://github.com/doctrine/orm/issues/4122)\n -[\\#1148](https://github.com/doctrine/orm/pull/1148)\n [DWEB-118] Fixed small typo in documentation about extra lazy\n associations\n- [DDC-3347](https://github.com/doctrine/orm/issues/4145)\n -[\\#1157](https://github.com/doctrine/orm/pull/1157) Fixing\n calls of schema-update tools\n- [DDC-3348](https://github.com/doctrine/orm/issues/4146)\n -[\\#1158](https://github.com/doctrine/orm/pull/1158) Update\n QueryBuilder reference documentation.\n- [DDC-3351](https://github.com/doctrine/orm/issues/4150)\n -[\\#1161](https://github.com/doctrine/orm/pull/1161) Fixing\n error with from() parameters in example\n- [DDC-3353](https://github.com/doctrine/orm/issues/4152)\n -[\\#1163](https://github.com/doctrine/orm/pull/1163) Update\n xml-mapping.rst\n- [DDC-3388](https://github.com/doctrine/orm/issues/4190)\n -[\\#1183](https://github.com/doctrine/orm/pull/1183) Update\n tools.rst\n- [DDC-3389](https://github.com/doctrine/orm/issues/4191)\n -[\\#1184](https://github.com/doctrine/orm/pull/1184)\n Postgres SERIAL is not a post-insert identifier generation strategy\n- [DDC-3408](https://github.com/doctrine/orm/issues/4212)\n -[\\#1190](https://github.com/doctrine/orm/pull/1190)\n Document that AUTOGENERATE\\_ constants are allowed\n- [DDC-3411](https://github.com/doctrine/orm/issues/4216)\n -[\\#1192](https://github.com/doctrine/orm/pull/1192) Fixed a\n very minor typo\n- [DDC-3417](https://github.com/doctrine/orm/issues/4222)\n -[\\#1195](https://github.com/doctrine/orm/pull/1195)\n Correction Events.rs - Entity Listeners Resolver\n- [DDC-3420](https://github.com/doctrine/orm/issues/4226)\n -[\\#1198](https://github.com/doctrine/orm/pull/1198) Tables\n for buttons.\n- [DDC-3421](https://github.com/doctrine/orm/issues/4227)\n -[\\#1199](https://github.com/doctrine/orm/pull/1199) minor\n typo\n- [DDC-3456](https://github.com/doctrine/orm/issues/4265)\n -[\\#1226](https://github.com/doctrine/orm/pull/1226) Update\n Travis badges to use the SVG version\n- [DDC-3465](https://github.com/doctrine/orm/issues/4275)\n -[\\#1232](https://github.com/doctrine/orm/pull/1232)\n Explicit example of partial indexes\n- [DDC-3471](https://github.com/doctrine/orm/issues/4281)\n -[\\#1236](https://github.com/doctrine/orm/pull/1236) Minor\n docs fix: missing word 'do'\n- [DDC-3484](https://github.com/doctrine/orm/issues/4295)\n -[\\#1244](https://github.com/doctrine/orm/pull/1244) Change\n \\$this return type to static in AbstractQuery\n- [DDC-3499](https://github.com/doctrine/orm/issues/4311)\n -[\\#1253](https://github.com/doctrine/orm/pull/1253) Fix\n dead link\n- [DDC-3516](https://github.com/doctrine/orm/issues/4330)\n -[\\#1264](https://github.com/doctrine/orm/pull/1264) Add\n Changelog/Migration to 2.5 documentation chapter.\n- [DDC-3523](https://github.com/doctrine/orm/issues/4338)\n -[\\#1271](https://github.com/doctrine/orm/pull/1271) Update\n migration\\_2\\_5.rst\n- [DDC-3526](https://github.com/doctrine/orm/issues/4341)\n -[\\#1273](https://github.com/doctrine/orm/pull/1273)\n Incorrect @throws doc. in getSingleScalarResult\n- [DDC-3533](https://github.com/doctrine/orm/issues/4351)\n -[\\#1279](https://github.com/doctrine/orm/pull/1279)\n [Doc][Reference][2nd level cache]\n- [DDC-3542](https://github.com/doctrine/orm/issues/4359)\n -[\\#1287](https://github.com/doctrine/orm/pull/1287) Typo\n fix\n- [DDC-3547](https://github.com/doctrine/orm/issues/4364)\n -[\\#1290](https://github.com/doctrine/orm/pull/1290) [Doc]\n [Reference] [Second Level Cache]\n- [DDC-3555](https://github.com/doctrine/orm/issues/4373)\n -[\\#1296](https://github.com/doctrine/orm/pull/1296) Flip\n key value in \\$namespaces array\n- [DDC-3556](https://github.com/doctrine/orm/issues/4374)\n -[\\#1297](https://github.com/doctrine/orm/pull/1297)\n [DDC-3480](https://github.com/doctrine/orm/issues/4291)\n Docs: Embeddable supported mappings\n- [DDC-3557](https://github.com/doctrine/orm/issues/4375)\n -[\\#1298](https://github.com/doctrine/orm/pull/1298) Docs:\n Remove empty pages from TOC\n- [DDC-3559](https://github.com/doctrine/orm/issues/4377)\n -[\\#1299](https://github.com/doctrine/orm/pull/1299) Fixed\n missing quote in one DQL example\n- [DDC-3570](https://github.com/doctrine/orm/issues/4390)\n -[\\#1305](https://github.com/doctrine/orm/pull/1305)\n Documentation : fix table prefix with STI\n- [DDC-3595](https://github.com/doctrine/orm/issues/4417)\n -[\\#1320](https://github.com/doctrine/orm/pull/1320) Fix\n 'entitiy' typo in Getting Started tutorial\n- [DDC-3599](https://github.com/doctrine/orm/issues/4421)\n -[\\#1322](https://github.com/doctrine/orm/pull/1322) Typo in\n documentation\n- [DDC-3611](https://github.com/doctrine/orm/issues/4435)\n -[\\#1329](https://github.com/doctrine/orm/pull/1329) Fix for\n inconsistent use of getSQLDeclaration\n- [DDC-3613](https://github.com/doctrine/orm/issues/4438)\n -[\\#1330](https://github.com/doctrine/orm/pull/1330) Fix\n @Column options sections in documentation\n- [DDC-3614](https://github.com/doctrine/orm/issues/4439)\n -[\\#1331](https://github.com/doctrine/orm/pull/1331) [DOCS]\n Fixed class name in aggregate fields example\n- [DDC-3617](https://github.com/doctrine/orm/issues/4442)\n -[\\#1334](https://github.com/doctrine/orm/pull/1334) Changed\n some wrong usage of the @internal phpdoc\n- [DDC-3620](https://github.com/doctrine/orm/issues/4446)\n -[\\#1335](https://github.com/doctrine/orm/pull/1335) Fix\n AbstractQuery::getParameter() documented return type\n- [DDC-3627](https://github.com/doctrine/orm/issues/4453)\n -[\\#1341](https://github.com/doctrine/orm/pull/1341) [doc]\n Minor fixes and typos\n- [DDC-3648](https://github.com/doctrine/orm/issues/4476)\n -[\\#1355](https://github.com/doctrine/orm/pull/1355) [Docs]\n TablePrefix example - Check for being the owning side\n- [DDC-3651](https://github.com/doctrine/orm/issues/4480)\n -[\\#1358](https://github.com/doctrine/orm/pull/1358) Update\n docs for clear-cache commands\n\nPlease report any issues you may have with the update on the mailing\nlist or on [JIRA](https://www.doctrine-project.org/jira/browse/DDC).\n", + "date": "2015-04-02 00:00:00" }, { - "url": "/2010/04/20/orm-is-not-a-choice.html", - "slug": "orm-is-not-a-choice", - "title": "ORM is Not a Choice", - "authorName": "romanb", - "authorEmail": "", - "contents": "**NOTE** When speaking of \"ORM\" or \"object-relational mapping\" in\n: this post I am referring to the act of mapping an [object-oriented\n domain model](https://martinfowler.com/eaaCatalog/domainModel.html)\n to a relational database. There are other, alternative forms of\n object-relational mapping.\n\n\"Should I use an ORM?\" is a frequently asked question that somehow\nmisses the point, because ORM is usually not some optional thing you can\neither use or not. The choices are elsewhere. Furthermore, if there is a\ndislike for ORM tools it helps to clarify what exactly is the cause. The\ncause can be a dislike of object-oriented domain models. For example, if\nyou prefer to separate data from behavior/logic, as [I've read recently\non Twitter](https://twitter.com/elazar/status/12492601691) , then it is a\nsign that you don't like domain models, at least not rich ones, maybe\n[anemic ones](https://martinfowler.com/bliki/AnemicDomainModel.html) ,\nand you probably don't like OOP much at all then, because bundling data\nwith behavior is what OO is about, usually.\n\n> **NOTE** It's OK not to like OOP these days. Its not the holy grail\n> anymore, mostly due to the usually messy concurrency characteristics\n> and problems resulting from typical object-oriented design which\n> revolves around imperative programming with direct manipulation of\n> mutable state, but that does not apply to PHP as much as to some other\n> languages due to its thread-confined nature/execution model.\n\nYou can not use a relational database in combination with an\nobject-oriented domain model without mapping.\n\nThe choices that lead to the need for ORM are the following:\n\n- *You can choose to use a relational database or not.*\n- *You can choose to create an object-oriented domain model or not.*\n\nIf you want a relational database and you want an object-oriented domain\nmodel, you need ORM, there is no choice. If you choose to use a\nrelational database but not an object-oriented domain model, you might\nneed some other form of object-relational or other mapping, depending on\nhow you want to model your application and your business logic around\nthe data in particular.\n\nPeople not being aware of the above two choices, especially the second\none, is unfortunately what makes some of them \"choose ORM\" and then\nsometimes getting frustrated. Using an ORM without even having or\nwanting a domain model and with the head still exclusively full of\ntables and rows, which are at the beginning and at the end of every\nthought about the software being built, is a wrong choice. With these\npreconditions, ORM quickly becomes a pain, and its wrong. Forcing your\nrelational data into objects even though you don't really know what to\ndo with them, maybe it just seems nice to have them as \"data\ncontainers\", is the wrong motivation. If you don't want to combine your\nbusiness data with your business behavior, something that can be done\nnicely in an OO domain model, then there is not much value in having\nobjects wrapped around your data. Some other, wrong motivations for\n\"choosing an ORM\", at least when they are the main motivations, are:\n\n- Database vendor independence\n- \"Hiding SQL\"\n\nThese are just additional benefits you can get but they are not the main\npurpose of an ORM tool. Then what is the main purpose? *State\nmanagement. Synchronizing the state of your in-memory object model with\na relational database for the purpose of persistent storage.* Neither\ndoes an ORM need to be database vendor independent, nor does it need to\nhide SQL to do this. Everything else is icing on the cake. If all you\nwant is to centralize your database access paths, which is a good thing\nfor caching and all, you don't need an ORM for that either, any database\naccess layer, existing or self-made, will do.\n\nI hope it is a bit clearer now that ORM is not a choice but a need that\nresults out of other choices.\n", - "date": "2010-04-20 00:00:00" + "url": "/2017/10/24/odm-1-2-0-and-1-1-7.html", + "slug": "odm-1-2-0-and-1-1-7", + "title": "Doctrine MongoDB ODM 1.2.0 and 1.1.7 Released", + "authorName": "Andreas Braun", + "authorEmail": "alcaeus@alcaeus.org", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM [1.2.0](https://github.com/doctrine/mongodb-odm/releases/tag/1.2.0)\nand [1.1.7](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.7).\n\nMongoDB ODM 1.1.7\n=================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/1.1.x/CHANGELOG-1.1.md#117-2017-10-23).\nA full list of issues and pull requests included in this release may be\nfound in the [1.1.7\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.1.7).\n\nWhat is new in 1.2.0?\n=====================\n\nDoctrine MongoDB ODM 1.2.0 introduces the following new features:\n\n- The `readOnly` mapping option allows you to map immutable documents.\n- With `slaveOkay` being deprecated, you can now specify a\n `readPreference` for your documents. This `readPreference` will\n automatically be applied to all queries for those mapped documents.\n- With `dbRef` only offering limited support in aggregation pipeline\n queries, there's a new reference storage strategy called `ref` that\n stores references as objects (without \"\\$\"-prefixed field names),\n allowing you to use it with discriminators and aggregation pipeline\n queries.\n- When mapping inverse references, you may now specify fields that\n will be primed when the reference is resolved. This saves you from\n writing a dedicated repository method for the sole purpose of\n priming references.\n- The `odm:schema:validate` command validates the document mapping to\n help you spot mistakes.\n- A new builder for aggregation pipeline queries, including support\n for marshalling results into read-only documents.\n- Query result documents that can be used to hydrate results from an\n aggregation pipeline query. These documents cannot be written back\n to the database.\n\nUpgrading to 1.2.0\n==================\n\nThe new version requires PHP 5.6. Running on PHP 7+ requires the use of\na polyfill for the legacy driver, e.g.\n[mongo-php-adapter](https://github.com/alcaeus/mongo-php-adapter). When\nrunning on PHP 5.6, MongoDB ODM requires version 1.6.7 or newer of the\nlegacy MongoDB driver.\n\nSeveral features have been deprecated in this release and will be\ndropped in the 2.0 release. To see this, please view the [UPGRADE\ndocument](https://github.com/doctrine/mongodb-odm/blob/1.2.x/UPGRADE-1.2.md).\n\nInstallation\n============\n\nYou can install the new version of MongoDB ODM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.2.0\"\n }\n}\n```\n\nStability and upcoming releases\n===============================\n\nAs of today, Doctrine MongoDB ODM `1.2.0` is the stable distribution.\nThere is no release schedule for an upcoming version yet.\n\n`1.1.7` is the last release of the `1.1.x` development line and will no\nlonger receive bug fixes. Instead, we will focus on developing MongoDB\nODM 2.0 with native support for the new MongoDB driver. This release\nwill require at least PHP 7.1 and contain several BC breaking changes.\nTo ease the migration process, we will release a `1.3.0` which will be\nbackwards compatible to the `1.2.x` line and only deprecate features to\nbe removed in 2.0. The `1.x` line of MongoDB ODM will not receive any\nnew features.\n", + "date": "2017-10-24 00:00:00" }, { - "url": "/2021/11/26/dbal-3.2.0.html", - "slug": "dbal-3.2.0", - "title": "New Release: Doctrine DBAL 3.2.0", - "authorName": "Sergei Morozov", - "authorEmail": "morozov@tut.by", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL 3.2.0. As most of the minor releases, this one\nfocuses on new features, improvements and deprecations of the old APIs. Here are some details on the most significant\nfeatures and improvements:\n\n## Platform-aware schema comparison ([#4746](https://github.com/doctrine/dbal/pull/4746))\n\nUp until this release, the logic of comparing database schemas had a major design flaw: it took into account only the\nabstract schema definitions without taking the target platform into account.\n\nThis flaw would lead to multiple issues which shared the same root cause: the two definitions could be considered\ndifferent by the DBAL, but they would produce the same DDL.\n\nFor instance, consider the two column definitions:\n\n```php\n// old schema\n$column1 = new Column('contents', Type::getType('text'));\n\n// new schema\n$column2 = new Column('contents', Type::getType('text'), ['default' => 'Hello, world!']);\n```\n\nIf we compared them with the comparator, we'd get a diff:\n\n```php\n$comparator = new Comparator();\n$comparator->diffColumn($column1, $column2);\n// array(1) {\n// [0] =>\n// string(7) \"default\"\n// }\n```\n\nThis might be valid for the platforms that support the `DEFAULT` constraint on `TEXT` columns but isn't valid for those\nthat don't support it (e.g. MySQL). Regardless of the diff, both definitions would produce the same DDL on MySQL:\n\n```sql\ncontents LONGTEXT NOT NULL\n```\n\nAn attempt to migrate the old schema to the new one would produce a false-positive diff but applying it wouldn't result\nin any schema changes.\n\nA false-negative diff was also possible. Consider these following example:\n\n```php\n// old schema\n$column1 = new Column('settings', Type::getType('json'));\n\n// new schema\n$column2 = new Column('settings', Type::getType('json'), ['length' => 16777215]);\n```\n\nComparison of the above column definitions should have triggered a diff on MySQL and migrate the underlying column\nfrom `TEXT` to `MEDIUMTEXT` but it didn't, because the DBAL would ignore the length of the `TEXT` columns.\n\nApart from that, the DBAL would compare only a subset of the definitions, so some column options as the character set\nand collation weren't taken into account during comparison at all.\n\n### The new approach\n\nInstead of comparing abstract definitions on a per-property basis, the new implementation compares the DDL that is generated from both definitions for the target database platform. If the definitions produce the same DDL, they are considered equal. According to the tests and the number of resolved issues, this approach should be more accurate and less error-prone.\n\nImplementing this approach was impossible without introducing a new API which rendered the existing API obsolete.\n\nPrior to DBAL `3.2.0`, the schema comparator could be only instantiated directly via the `new` keyword:\n\n```php\n$comparator = new Comparator();\n```\n\nInstantiated like this, the comparator doesn't have a notion of the target database platform and cannot perform the comparison properly. That is why, this way of instantiation is deprecated in favor of instantiating the comparator by the schema manager:\n\n```php\n$schemaManager = $connection->createSchemaManager();\n$comparator = $schemaManager->createComparator();\n```\n\nThis way, the schema manager can instantiate a platform-specific comparator and provide it with the necessary context (e.g. the default collation used by the database).\n\nWhile the old API is still available, it is recommended to use the new API for more accurate comparison.\n\n## Support for `psr/cache` ([#4620](https://github.com/doctrine/dbal/pull/4620))\n\nSince the Doctrine Cache library is being sunset, the new DBAL release introduced the ability to use a PSR-6 compatible implementation for result caching.\n\nWhile both the `doctrine/cache` and `psr/cache` APIs will be supported until the next major DBAL release, we recommend users to switch to a PSR-6 compatible implementation in their projects.\n\n## Support for `psr/log` ([#4967](https://github.com/doctrine/dbal/pull/4967))\n\nThe `SQLLogger` interface was designed long ago and has certain limitations: there is no way to log messages at different logger levels and it is really challenging to extend the logger functionality without introducing breaking API changes.\n\nThe new DBAL release introduces a new middleware that can delegate logging to a PSR-3 compatible implementation.\n\nNote that the new logger won't produce the messages identical to the ones produced by the old one. If you have any processes built around analysing log messages, you may need to make some changes before adopting the new API.\n\n## Always cache the full result ([#5003](https://github.com/doctrine/dbal/pull/5003))\n\nThe implementation of the result cache prior to DBAL 3.2.0 would store the result set in the cache only once it was fetched completely. It led to the following issues:\n\n1. If the result isn't yet cached and its consumer didn't fetch it completely, the query would be executed again.\n2. In case of a cache miss, the DBAL would `get()` the cache entry twice: once to fetch the data and once to merge the just fetched result with other results that may be stored in the cache.\n\nThe new implementation stores the results in the cache right after they were fetched. It simplifies the caching layer significantly and makes its behavior more straightforward.\n\n## Add events for Transaction begin/commit/rollback ([#4622](https://github.com/doctrine/dbal/pull/4622))\n\nThe new DBAL version introduces three more transaction-related events:\n\n- `onTransactionBegin`,\n- `onTransactionCommit`,\n- `onTransactionRollBack`.\n\nSubscribing to those might be helpful if the application logic integrates the database transaction flow with the business logic implemented outside the database. For instance, in the filesystem.\n\n## Basic exception handling in IBM DB2 and SQL Server drivers ([#4929](https://github.com/doctrine/dbal/pull/4929), [#4928](https://github.com/doctrine/dbal/pull/4928))\n\nThe DBAL provides a mechanism that converts driver-specific error codes to portable error-specific exceptions. For instance an attempt to insert `NULL` into a column that has a `NOT NULL` constraint applied will result in error with the code `1566` on MySQL and in `ORA-01400` on Oracle. The DBAL will convert these two errors to a portable `NotNullConstraintViolationException`.\n\nHistorically, the DBAL drivers based on the `ibm_db2`, `sqlsrv` and `pdo_sqlsrv` extensions did not support this feature and would thow a generic `DriverException`.\n\nAs of DBAL 3.2.0, this feature is supported by all bundled drivers.\n\n## Improved `AbstractPlatform::getLengthExpression()` ([#4855](https://github.com/doctrine/dbal/pull/4855))\n\nAlthough the `LENGTH` expression was implemented for all supported database platforms, the different implementations didn't have consistent semantics:\n\n1. Most implementations would return the length in characters (Unicode code points), which is the most expected behavior.\n2. The implementations for MySQL and IBM DB2 would return the number of bytes. It worked fine for the strings that consisted only of the ANSI characters, but an attempt to use it with a wider range of characters would produce an unexpected result. For instance, the length of the string `'\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!'` might be reported as `19` instead of `12`.\n\nAs of DBAL 3.2.0, all platforms return the length in Unicode points according to the character set used by the database connection. Note, SQL Server supports UTF-8 only as of SQL Server 2019.\n\nYou can find more details in the [release notes](https://github.com/doctrine/dbal/releases/tag/3.2.0).\n", - "date": "2021-11-26 00:00:00" + "url": "/2015/12/31/cache-1-6-0.html", + "slug": "cache-1-6-0", + "title": "Cache 1.6.0 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.6.0](https://github.com/doctrine/cache/releases/tag/v1.5.2).\n\nCache 1.6.0\n===========\n\nSupport for PHP versions below 5.5.0 was removed: please remember that\nif you are still using PHP 5.4.x or lower, the PHP project [does not\nprovide support for those versions\nanymore](https://secure.php.net/supported-versions.php).\n[\\#109](https://github.com/doctrine/cache/pull/109)\n\nNative [APCu](https://github.com/krakjoe/apcu) support was introduced:\nif you run newer versions of APCu, then you can use the new\n[ApcuCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/ApcuCache.php)\nadapter. [\\#115](https://github.com/doctrine/cache/pull/117)\n\nA\n[MultiPutCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/MultiPutCache.php)\ninterface was introduced: the\n[CacheProvider](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/CacheProvider.php)\nimplements it by default now. This interface can lead to improved\nperformance when saving multiple keys at once, if your cache adapter\nsupports such an operation.\n[\\#117](https://github.com/doctrine/cache/pull/117)\n\nThe\n[ArrayCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/ArrayCache.php)\nnow honors the given cache entries TTL, making it possible to use it\neven in long running processes without the risk of dealing with stale\ndata. [\\#130](https://github.com/doctrine/cache/pull/130)\n\nInstallation\n============\n\nYou can install the Cache component using the following `composer.json`\ndefinitions:\n\n```bash\ncomposer require doctrine/cache:^1.6\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2015-12-31 00:00:00" }, { - "url": "/2022/01/11/orm-2.11.html", - "slug": "orm-2.11", - "title": "New Release: Doctrine ORM 2.11 with Enums, Virtual Columns, Read-Only Properties, Nested Attributes and more", - "authorName": "Benjamin Eberlei", - "authorEmail": "kontakt@beberlei.de", - "contents": "We have released a new minor version 2.11 of Doctrine ORM with several improvements\nand new features.\n\n[See all changes and contributors in the\nChangelog](https://github.com/doctrine/orm/releases/tag/2.11.0) on Github.\n\nThis blog post gives an overview over all the new features and improvements\nthat are user facing. Please see the changelog and UPGRADE notes for new\ndeprecations.\n\n## PHP 8.1 Enum Support\n\nWith PHP 8.1 the language has first class support for enumerations and Doctrine\nORM 2.11 supports the mapping of database values to [Backed\nEnums](https://www.php.net/manual/en/language.enumerations.backed.php).\n\nThe support is not integrated on DBAL Type level, but using a new mapping option\ncalled `enumType` on column/field declaration level:\n\n```php\nenum Suit: string {\n case Hearts = 'H';\n case Diamonds = 'D';\n case Clubs = 'C';\n case Spades = 'S';\n}\n\n#[Entity]\nclass Card\n{\n /** ... */\n\n #[Column(type: 'string', enumType: Suit::class)]\n public $suit;\n}\n```\n\n## Virtual and Generated Columns\n\nThere has been constant demand for this feature for a long time, to add support\nfor columns that are not insertable/updatable and might have their value\nupdated on the database side.\n\nWe have worked along the lines of Java Persistence API support of `insertable`,\n`updatable` and `generated` options for field mappings.\n\nThere are two major use cases for this:\n\n1. Map a column several times, for example with join columns:\n\n```php\n#[Entity]\nclass User\n{\n #[ManyToOne(targetEntity: Country:class), JoinColumn(name: \"country_code\", referencedColumnName: \"country_code\")]\n public $country;\n\n #[Column(type: \"string\", name: \"country_code\", insertable: false, updatable: false)]\n public $countryCode;\n}\n```\n\n2. Columns updated by the database\n\n```php\n#[Entity]\nclass Article\n{\n #[Column(type: \"datetime\",\n columnDefinition: \"TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\",\n insertable: false,\n updatable: false,\n generated: \"ALWAYS\")]\n public $created;\n}\n```\n\n## Support for Readonly Properties\n\nAnother PHP 8.1 feature is the new readonly keyword that prevents the value of\na property to be written again after it has been initialized in the constructor\nof an object.\n\nWith ORM 2.11 the support now works as you would expect with no additional\nmapping options necessary:\n\n```php\n#[Entity, Table(name: 'author')]\nclass Author\n{\n #[Column, Id, GeneratedValue]\n private readonly int $id;\n\n #[Column]\n private readonly string $name;\n}\n```\n\n## AssociationOverrides and AttributeOverrides in Attribute Driver\n\nThe new `AttributeDriver` for PHP 8 did not support the equivalent mapping\noptions for association and attribute overrides that are available for XML and\nAnnotation mapping, because in PHP 8.0 it was not possible to nest complex\nattributes. \n\nWith the support now available in PHP 8.1 we have added these attributes.\n\n```php\nsetSchemaIgnoreClasses([$fqcn]);\n$config->getSchemaIgnoreClasses();\n```\n", - "date": "2022-01-11 00:00:00" - }, - { - "url": "/2012/12/05/doctrine-2-3-1.html", - "slug": "doctrine-2-3-1", - "title": "Doctrine 2.3.1 relased", - "authorName": "Benjamin Eberlei", + "url": "/2011/07/04/doctrine-2-1.html", + "slug": "doctrine-2-1", + "title": "Doctrine 2.1 released", + "authorName": "beberlei", "authorEmail": "", - "contents": "**05.12.2012**\n\nWe have released the first mini release in the 2.3 cycle. Due to high\nworkload of all the participating developers we couldn't release this\nearlier. We hope to release 2.3.2 in a much shorter period from now.\n\n- [DBAL\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10325)\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10323)\n\nYou can install the release through\n[Github](https://github.com/doctrine/orm) , download, PEAR or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.1\"\n }\n }\n", - "date": "2012-12-05 00:00:00" + "contents": "We finished all the outstanding work on the Doctrine 2.1 branch and\nreleased the first final version. Almost all of the code was kept\nbackwards compatible. There are only some slight changes that are\nexplained in the [UPGRADE\\_TO\\_2\\_1 file](https://github.com/doctrine/orm/blob/master/UPGRADE.md#upgrade-to-21).\n\nThis release is packed with new features and optimizations:\n\n- **Indexed associations:** You can force Doctrine to hydrate\n collection elements by using a field of the target entity as key,\n for example the ID or any unique field. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/working-with-indexed-associations.html).\n- **Extra Lazy Collections:** Instead of always initializing the\n complete collection in memory you can now mark a collection as extra\n lazy, leading to special SQL executed for Collection\\#count(),\n Collection\\#contains() and Collection\\#slice(). This allows to\n implement efficient pagination on collections without having to use\n DQL. It also allows to save some memory for common use-cases with\n very large collections. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/extra-lazy-associations.html).\n- **Identity through Foreign Entities or derived entities:** You can\n now use a foreign key as identifier of an entity. This translates to\n using @Id on a @ManyToOne or @OneToOne association. You can read up\n on this [feature in the\n tutorial](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/composite-primary-keys.html#identity-through-foreign-entities).\n- **Persister Refactoring:** Instead of reimplementing hydration in\n the persisters we now use the hydration mechanism that is used by\n DQL aswell. Sadly this drops performance for hydration in the\n persisters by 5-25% for some use-cases. It starts with a drop of 5%\n for a few hydrations and increases in the number of different\n hydrations you are doing in a request. As a benefit we could remove\n tons of code and use several optimizations that actually increase\n performance when using fetch=\"EAGER\" in ManyToOne and OneToOne\n associations. Furthermore inverse OneToOne associations previously\n always executed an additional query, which is now replaced with a\n join.\n- **Temporary fetch mode in DQL** On a DQL Query you can now call\n \\`\\$query-\\>setFetchMode(\\$\\`className, \\$assocName, \\$fetchMode) to\n temporarily set the fetch mode to a value different from the one\n defined in the Association Mapping. If you set a ManyToOne or\n OneToOne association to eager fetching Doctrine will use a batch\n WHERE id IN (..) query to fetch all entities in a single query after\n the original query was completed.\n- **Binding Arrays to a Query:** Doctrine now implements low-level\n support for binding arrays to named or positional parameters. This\n is possible with the Doctrine::TYPE\\_INT\\_ARRAY and\n Doctrine::TYPE\\_STR\\_ARRAY parameters that you have to pass as types\n to a query you want to use this feature in. EntityRepository now\n supports passing arrays as values to a field and uses an IN query.\n- **EntityRepository Limit and OrderBy:** The method\n EntityRepository\\#findBy() now accepts additional parameters for\n ordering, limit and offset.\n- **ResultSetMapping Helper:** There is now a class that simplifies\n populating a ResultSetMapping based on an existing ClassMetadata\n instance.\n- **Zero Based Parameters in Queries:** You can now start with the\n parameter ?0 in DQL queries.\n- **Named DQL Queries in Metadata:** You can add dql queries in the\n mapping files using @NamedQueries(@NamedQuery(name=\"foo\",\n query=\"DQL\")) and access them through\n \\$em-\\>getRepository()-\\>getNamedQuery().\n- **Date related DQL functions:** Suport for DATE\\_ADD(), DATE\\_SUB()\n and DATE\\_DIFF() in DQL.\n- **New console command orm:info:** Gives details about all registered\n entities and if their mappings are valid or not.\n- **Read Only Entities:** You can set the attribute readOnly=true on\n an entity. This will only allow to persist new instances of this\n entity or removing them, they will never be considered for updating,\n thus allowing for performance optimizations where these entities are\n not considered in the UnitOfWork changeset computations.\n- **SQL Query Object:** There is now an SQL Query object in the\n Doctrine project. You can create an instance with\n \\$connection-\\>createQueryBuilder().\n- **Automatic Parameter Type Inference:** For certain parameters types\n such as integer and DateTime ORM Query::setParameter can now\n automatically infer the type instead of requiring manually passing\n the values as third parameter.\n- **AnnotationReader Refactoring** - The annotation reader is now much\n more powerful and also allows for giving you error advices if you\n configure it this way. See the\n [documentation](https://www.doctrine-project.org/docs/common/2.1/en/reference/annotations.html)\n on all the changes and how Annotations work in 2.1.\n\nSee the changelogs for a list of all changes:\n\n- [Doctrine ORM 2.1\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10022)\n- [Doctrine DBAL 2.1\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10068)\n- [Doctrine Common 2.1\n Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10123)\n\nYou can grab the code from our [downloads\nsection](https://www.doctrine-project.org/projects) , from\n[PEAR](http://pear.doctrine-project.org) or directly from\n[Github](https://github.com/doctrine).\n\nI will announce winners of the backwards compatibility competition in\nthe next weeks and send out gifts. The team thanks all contributors and\nbug-reporters for helping making Doctrine 2.1 a stable release. The next\nrelease of Doctrine 2.2 is scheduled for December 2011. We havent quite\nmade up our mind on the roadmap yet, but expect a post on this issue\nsoon.\n", + "date": "2011-07-04 00:00:00" }, { - "url": "/2015/01/12/dbal-244-251.html", - "slug": "dbal-244-251", - "title": "DBAL 2.4.4 and 2.5.1 released", - "authorName": "Steve M\u00fcller", - "authorEmail": "deeky666@googlemail.com", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n2.4.4 and 2.5.1. Various bugs that prevented users from upgrading to\nDBAL 2.5.x have been fixed in DBAL 2.5.1, along with some others. DBAL\n2.4.4 only contains backported bug fixes addressed since the release of\nDBAL 2.5.0.\n\nThe index renaming feature introduced in DBAL 2.5.0 caused trouble for\nsome MySQL users utilizing ORM's schema tool to upgrade their schemas\nwhere the schema tool was generating invalid `DROP INDEX` /\n`CREATE INDEX` SQL. Fixing this issue was only possible by introducing a\nminor BC break (change in behaviour), please see `UPGRADE.md` for more\ninformation (we know that this is a patch release but we are actually\nreverting a BC break here). MariaDB users had problems upgrading to DBAL\n2.5.0 because of the new platform detection feature not taking MariaDB\nbackends into account. Additionally, some minor bugs around schema\ncreation / introspection and DDL in various platforms were fixed.\n\nPlease note that this release does `not yet` include a fix for users\nhaving problems with the DBAL connection not being lazy anymore since\nDBAL 2.5.0 when retrieving the underlying platform. Unfortunately we did\nnot find a good solution for this issue yet. Until the issue is fixed\nplease directly set the platform version as a workaround by using the\n`serverVersion` configuration option described in the\n[documentation](https://www.doctrine-project.org/projects/doctrine-dbal/en/current/reference/configuration.html#automatic-platform-version-detection)\nif you are encountering any problems.\n\nYou can find all the changes on JIRA:\n\n- [DBAL\n 2.4.4](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10725)\n - 9 issues fixed\n- [DBAL\n 2.5.1](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10727)\n - 24 issues fixed\n\nYou can install the DBAL using Composer and the following\n`composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/dbal\": \"2.4.4\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/dbal\": \"2.5.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-01-12 00:00:00" + "url": "/2008/07/01/introducing-the-doctrine-forum.html", + "slug": "introducing-the-doctrine-forum", + "title": "Introducing the Doctrine Forum", + "authorName": "jwage", + "authorEmail": "", + "contents": "For those of you who are not keen on using the mailing list or irc for\ngetting help with Doctrine, we now have a public Forum, powered by\nPHPBB3(which is very nice btw). Please contact me at jonwage at\ngmail.com if you would like a forum for your language added or if you\nare interested in being a moderator.\n", + "date": "2008-07-01 00:00:00" }, { - "url": "/2015/01/25/orm-2-5-0-alpha-2.html", - "slug": "orm-2-5-0-alpha-2", - "title": "Doctrine ORM 2.5.0-alpha2 Pre-Release", + "url": "/2015/11/02/cache-1-4-4_and-1-5-1.html", + "slug": "cache-1-4-4_and-1-5-1", + "title": "Cache 1.4.4 and 1.5.1 Released", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability Doctrine ORM\n`2.5.0-alpha2`.\n\nThis is a pre-release meant to allow users and contributors to try out\nthe new upcoming features of the ORM.\n\nWe encourage all of our users to help us by trying out this alpha\nrelease. Please report any possible problems or incompatibilities that\nmay have been introduced during development.\n\nThis pre-release is not yet at feature-freeze, therefore we urge\ncontributors to contact us if there is any change that requires our\nattention before we reach the beta (feature-freeze) release stage.\n\nWhat is new in 2.5.x?\n=====================\n\nWe are currently in the process of documenting all the changes and new\nfeatures that were introduced in Doctrine ORM 2.5.x.\n\nYou can find the current state of the 2.5.0 changes overview in [the\nupgrade\nnotes](http://docs.doctrine-project.org/en/latest/changelog/migration_2_5.html).\n\nRelease RoadMap\n===============\n\nWe expect to release following versions of the ORM in the next days:\n\n- `2.5.0-beta1` on `2015-02-02`\n- `2.5.0-beta2` on `2015-02-09`\n- `2.5.0` on `2015-02-16`\n\nPlease note that these dates may change depending on the availability of\nour team.\n\nAdditionally, we will delay the release if any newly introduced critical\nbugs are detected, as it already happened with this `2.5.0-alpha2`\nrelease.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"2.5.0-alpha2\"\n },\n \"minimum-stability\": \"dev\"\n}\n```\n\nChanges since 2.5.0-alpha1\n==========================\n\nThis is a list of issues solved in `2.5.0-alpha2` since `2.5.0-alpha1`:\n\n- [[DDC-3517]](https://github.com/doctrine/orm/issues/4331)\n [[GH-1265]](https://github.com/doctrine/orm/pull/1265) Fix\n error undefined index \"targetEntity\"\n- [[DDC-3516]](https://github.com/doctrine/orm/issues/4330)\n [[GH-1264]](https://github.com/doctrine/orm/pull/1264) Add\n Changelog/Migration to 2.5 documentation chapter.\n- [[DDC-3520]](https://github.com/doctrine/orm/issues/4335)\n [[DDC-3521]](https://github.com/doctrine/orm/issues/4336)\n [[GH-1269]](https://github.com/doctrine/orm/pull/1269)\n `self-update` composer before install\n- [[DDC-3526]](https://github.com/doctrine/orm/issues/4341)\n [[GH-1273]](https://github.com/doctrine/orm/pull/1273)\n Incorrect `@throws` doc. in `getSingleScalarResult`\n- [[DDC-3465]](https://github.com/doctrine/orm/issues/4275)\n [[GH-1232]](https://github.com/doctrine/orm/pull/1232)\n Explicit example of partial indexes\n- [[DDC-3300]](https://github.com/doctrine/orm/issues/4094)\n [[DDC-3503]](https://github.com/doctrine/orm/issues/4317)\n [[GH-1130]](https://github.com/doctrine/orm/pull/1130)\n [[GH-1232]](https://github.com/doctrine/orm/pull/1232) Resolve\n target entity also in discriminator map (allows interfaces and\n custom names in discriminator map)\n- [[DDC-3378]](https://github.com/doctrine/orm/pull/1176)\n [[GH-1176]](https://github.com/doctrine/orm/pull/1176) Support\n merging entities with composite identities defined through to-one\n associations\n- [[DDC-3533]](https://github.com/doctrine/orm/issues/4351)\n [[GH-1279]](https://github.com/doctrine/orm/pull/1279) Fixed\n typos and grammar in the second level cache documentation\n- [[DDC-3343]](https://github.com/doctrine/orm/issues/4141)\n [[DDC-3536]](https://github.com/doctrine/orm/issues/4349)\n [[DDC-3544]](https://github.com/doctrine/orm/issues/4361)\n [[GH-1281]](https://github.com/doctrine/orm/pull/1281)\n [[GH-1288]](https://github.com/doctrine/orm/pull/1288)\n [[GH-1169]](https://github.com/doctrine/orm/pull/1169)\n Entities should not be deleted when using `EXTRA_LAZY` and\n `one-to-many`\n- [[DDC-3538]](https://github.com/doctrine/orm/issues/4355)\n [[DDC-3519]](https://github.com/doctrine/orm/issues/4333)\n [[GH-1283]](https://github.com/doctrine/orm/pull/1283)\n [[GH-1267]](https://github.com/doctrine/orm/pull/1267)\n Reverted [\\#1220](https://github.com/doctrine/orm/pull/1220),\n fixed order in pagination logic\n- [[DDC-2704]](https://github.com/doctrine/orm/issues/3446)\n [[DDC-3524]](https://github.com/doctrine/orm/issues/4339)\n [[GH-1272]](https://github.com/doctrine/orm/pull/1272) merge\n inherited transient properties - merge properties into uninitialized\n proxies\n- [[DDC-3346]](https://github.com/doctrine/orm/issues/4144)\n [[DDC-3531]](https://github.com/doctrine/orm/issues/4347)\n [[DDC-3534]](https://github.com/doctrine/orm/issues/4352)\n [[GH-1280]](https://github.com/doctrine/orm/pull/1280)\n [[GH-1277]](https://github.com/doctrine/orm/pull/1277) fixed\n `findOne*` operations when using a `EAGER` `*-to-many` association\n- [[DDC-3541]](https://github.com/doctrine/orm/issues/4358)\n [[GH-1286]](https://github.com/doctrine/orm/pull/1286)\n Removing XDebug from non-coverage builds\n- [[DDC-3546]](https://github.com/doctrine/orm/issues/4363)\n [[GH-1289]](https://github.com/doctrine/orm/pull/1289) Improve\n test suite performance\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DDC).\n", - "date": "2015-01-25 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.4.4](https://github.com/doctrine/cache/releases/tag/v1.4.4) and\n[1.5.1](https://github.com/doctrine/cache/releases/tag/v1.5.1).\n\nCache 1.4.4\n===========\n\nThis release fixes the version number reported in\n[Doctrine/Common/Cache/Version::VERSION](https://github.com/doctrine/cache/blob/v1.5.1/lib/Doctrine/Common/Cache/Version.php)\n\nAdditionally, a flaw in `CacheProvider#fetchMultiple()` was fixed:\n`null` and false-y values being fetched were considered cache misses,\nbut are now correctly included in the results\n([\\#104](https://github.com/doctrine/cache/pull/104)).\n\nYou can find the complete changelog for this release in the [v1.4.4\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.4.4).\n\nCache 1.5.1\n===========\n\nThis release includes all the fixes mentioned in the above `1.4.4`\npatch.\n\nYou can find the complete changelog for this release in the [v1.5.1\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.5.1).\n\nInstallation\n============\n\nYou can install the Cache component using Composer either of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.4.4\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.5.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2015-11-02 00:00:00" }, { - "url": "/2010/08/24/doctrine-orm-version-1-2-3-released.html", - "slug": "doctrine-orm-version-1-2-3-released", - "title": "Doctrine ORM Version 1.2.3 Released", - "authorName": "jwage", - "authorEmail": "", - "contents": "", - "date": "2010-08-24 00:00:00" + "url": "/2015/03/25/orm-2-5-0-rc-1.html", + "slug": "orm-2-5-0-rc-1", + "title": "Doctrine ORM 2.5.0-RC1 Release Candidate", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n`2.5.0-RC1`.\n\nThis is a release candidate meant to allow users and contributors to\nverify the stability of the next iteration of the ORM.\n\nWe encourage all of our users to help us by trying out this release.\nPlease report any possible problems or incompatibilities that may have\nbeen introduced during development.\n\nWhat is new in 2.5.x?\n=====================\n\nWe are currently in the process of documenting all the changes and new\nfeatures that were introduced in Doctrine ORM 2.5.x.\n\nYou can find the current state of the 2.5.0 changes overview in [the\nupgrade\nnotes](http://docs.doctrine-project.org/en/latest/changelog/migration_2_5.html).\n\nRelease RoadMap\n===============\n\nWe expect to release following versions of the ORM in the next days:\n\n> - `2.5.0` on `2015-04-02`\n\nPlease note that these dates may change depending on the availability of\nour team.\n\nWe also apologise for the major delays in this beta release, which are\ncaused by the scarce availability of the core team in these months.\n\nInstallation\n============\n\nYou can install this version of the ORM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/orm\": \"2.5.0-RC1\"\n },\n \"minimum-stability\": \"dev\"\n}\n```\n\nChanges since 2.5.0-beta1\n=========================\n\nThis is a list of issues solved in `2.5.0-RC1` since `2.5.0-beta1`:\n\n- [[DDC-3632](https://github.com/doctrine/orm/issues/4459)] -\n [[GH-1345](https://github.com/doctrine/orm/pull/1345)] Fix crashes in ``ConvertMappingCommand`and`GenerateEntitiesCommand`` when using entities with joined table inheritance\n- [[DDC-3634](https://github.com/doctrine/orm/issues/4461)] -\n [[GH-1346](https://github.com/doctrine/orm/pull/1346)] Fix: generated IDs are converted to integer even when they are big integers\n- [[DDC-3630](https://github.com/doctrine/orm/issues/4457)]\n [[DDC-3621](https://github.com/doctrine/orm/issues/4447)] -\n [[GH-1343](https://github.com/doctrine/orm/pull/1343)] Support embeddables in partial object query expression\n- [[DDC-3623](https://github.com/doctrine/orm/issues/4449)]\n [[DDC-3629](https://github.com/doctrine/orm/issues/4455)] -\n [[GH-1337](https://github.com/doctrine/orm/pull/1337)]\n [[GH-1342](https://github.com/doctrine/orm/pull/1342)] Paginator functional tests and sorting corrections\n- [[DDC-2224](https://github.com/doctrine/orm/issues/2922)]\n [[DDC-3625](https://github.com/doctrine/orm/issues/4451)] -\n [[GH-1339](https://github.com/doctrine/orm/pull/1339)] Honor `convertToDatabaseValueSQL` in DQL query\n: parameters and caches\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira/browse/DDC).\n", + "date": "2015-03-25 00:00:00" }, { - "url": "/2008/06/11/one-more-0-11-release-candidate.html", - "slug": "one-more-0-11-release-candidate", - "title": "One more 0.11 Release Candidate", + "url": "/2008/10/02/first-symfony-1-1-workshop-in-atlanta-usa.html", + "slug": "first-symfony-1-1-workshop-in-atlanta-usa", + "title": "First symfony 1.1 workshop in Atlanta, USA", "authorName": "jwage", "authorEmail": "", - "contents": "Well, we discovered some bugs in the last RC of 0.11 so we have decided\nto have another release candidate to make sure the 0.11 branch is a\nsolid major release of Doctrine. As always the changelog can be read in\nthe CHANGELOG in svn or on the website. Hopefully this will really be\nthe last release candidate of 0.11 and we will release a stable version.\nOnce 0.11 is released we plan to immediately begin working on 0.11.1 bug\nfix release as well as a new 0.12 branch which will bring some new\nfeatures as well as dozens of bug fixes. Thanks for all the\ncontributions from the core developers and community for this release.\n", - "date": "2008-06-11 00:00:00" - }, - { - "url": "/2014/02/21/security_in_doctrine.html", - "slug": "security_in_doctrine", - "title": "Security in Doctrine", - "authorName": "default", - "authorEmail": "", - "contents": "When using Doctrine in a project it is always a security critical\ncomponent because it talks directly to your database. As such security\nis very important to us. In security however, context is important and\nproviding you with query capabilities we have to expose you to the risk\nof SQL injections.\n\nDoctrine cannot prevent you from building SQL injections into your\napplications and so can no other DBAL, because it would require hiding\nSQL completely. But hiding SQL completely is not wanted, because it is\nsuch a powerful language.\n\nTherefore it is still your responsibility to make sure that you are\nusing Doctrine correctly when working with SQL.\n\nBut how would you know how to do so? Until now we had some small bits\nabout security here and there in the documentation, mostly in the\nchapters about Query objects. We came to the conclusion that this is not\nenough.\n\nThat conclusion sinked in with a security issue we became aware of last\nmonth, where one Doctrine user reported that one of the core\n`Doctrine\\DBAL\\Connection` APIs is supposedly vulnerable to SQL\ninjection. When you use `$connection->insert($tableName, $values)`, then\nboth the table name and the keys (columns) of the `$values` array are\nnot escaped, because we assume they are never user input.\n\nWe evaluated this issue together with [Padraic\nBrady](http://blog.astrumfutura.com/) (a known PHP security researcher)\nand came to the conclusion that this is not a security issue for us.\nWhy? Because we don't think this part of the API can be secured and\ntrying will make our users feel safe, when they are not. Using the DBAL\nAPIs directly always posed a much higher risk than using just the ORM.\n\nYou might think we are nuts by just claiming a non issue, but consider\nthe assumptions we make about tables and columns and our reasoning:\n\n- Quoting identifiers is bad, because it changes them from\n case-insensitive to case-sensitive. Even more weird, Oracle unquoted\n identifiers are uppercased, PostgreSQL unquoted identifiers are\n lowercased. MySQL casing is based on a config option. Doctrine 1.\\*\n had various unfixable bugs because of identifier quoting, which is\n why we decided that Doctrine will not use automatic identifier\n quoting.\n\n- The APIs of `Connection#insert()`, `Connection#update()` and\n `Connection#delete()` therefore accept both quoted and unquoted\n table/column identifiers, because quoting is the users choice.\n\n- A mechanism to detect SQL injection in strings that can be either\n quoted or unquoted is impossible to write completely secure. There\n are too many edge cases to consider and there is a realistic chance\n to miss one of them.\n\n- If you provide an API that is just secure in 99.999% of all cases,\n then you should not claim it is secure at all.\n\nAt this point you can still think we are wrong releasing insecure\nsoftware, however let me ask back: Isn't PHP shipping insecure software\nby providing PDO? SQL injection is possible by using PDO wrong. I can\nenumerate lots of libraries where security is the developers\nresponsibility: Template engines, authentication libraries and so on.\n\nA proper secured system requires knowledge about the context. That is\nwhy any kind of database abstraction layers can never fully protect you\nfrom SQL injection, because it does not know the context you are using\nit in.\n\nTo avoid secret knowledge about our security assumptions we are now\nstarting to be completely explicit about these issues. Both DBAL and ORM\nnow contain a \\`SECURITY.md\\` file, which contains basic information\nabout security and links to much more detailed documentation chapters on\nDoctrine security.\n\nWe have made an effort to list all the functions and operations that are\nsafe from SQL injection. There are not very many of them in the DBAL,\nbecause it is such a low level library. The ORM however is pretty\nsecure, except when concatenating user input into DQL and SQL queries.\n\nRead all the information about Security in Doctrine in the\ndocumentation.\n\n- [DBAL\n Security](https://www.doctrine-project.org/projects/doctrine-dbal/en/current/reference/security.html)\n- [ORM\n Security](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/security.html)\n\n", - "date": "2014-02-21 00:00:00" - }, - { - "url": "/2020/04/10/doctrine-migrations-3.0.html", - "slug": "doctrine-migrations-3.0", - "title": "Released doctrine/migrations 3.0-alpha", - "authorName": "Asmir Mustafic", - "authorEmail": "goetas@gmail.com", - "contents": "[`doctrine/migrations` 3.0-alpha](https://github.com/doctrine/migrations) \n has been [published](https://github.com/doctrine/migrations/tree/3.0.0-alpha1) on the 29th March 2020. \n\nThe upcoming 3.0 new major release is the result of almost 6 months of work and brings\n a completely refactored/rewritten internal structure and some interesting new features. \n \n### Why a new major release?\n\nThe `doctrine/migrations` `v1.x` codebase is 10 years old, and in the past years a lot of features have been added on top of its\ninitial architecture. \n`doctrine/migrations` `2.0` was released a bit more than a year ago. This major release did a bit of cleanup, \nbut the general structure remained the same.\nIn this schema you can see the dependencies between classes in the latest `2.3.x` branch:\n\n\n\nThree years after the launch of symfony as an Open-Source project,\nSensio Labs is very proud to announce its new offices in the USA.\n\n
\n\nTo celebrate, we organize our first symfony training in Atlanta between\nOctober 29th and 31th. The training will be based on the latest symfony\n1.1 and will be held in Atlanta (at the \"1230 Peachtree St N.E.\nPromenade II\").\n\n
\n\nThis symfony workshop will be given by a symfony expert coming from\nFrance and Jonathan Wage, the Doctrine lead developer, and a seasoned\nsymfony developer.??A symfony workshop is an interactive training\nsession during which you will learn how to develop high-quality web\napplications fast and efficiently with symfony. After three days of\nsymfony immersion, guided by Sensio experts sharing their knowledge and\nexperience, you will know enough techniques and methodology to become\nfluent in agile web development with symfony. You can find more\ninformation and subscribe online on our website.\n\n
\n\nIf you want more information, feel free to contact Nicolas Blin at\nNicolas.blin [at] sensio.com.Sensio Labs\n\n
\n\nSensio Labs helps its customers with their Internet strategy and\ndevelops their applications around the best Open-Source frameworks.\n\n
\n\nSensio Labs created symfony a Web application framework in PHP. Sensio\nLabs plays a major role in the Open-Source world. The company has 10\nyears of experience in development of high value web applications with\nmore than 500 projects for key accounts in many countries.\n\n
\n\n\n", + "date": "2008-10-02 00:00:00" }, { - "url": "/2010/06/15/doctrine2-beta2-released.html", - "slug": "doctrine2-beta2-released", - "title": "Doctrine2 BETA2 Released", + "url": "/2011/08/26/doctrine2-1-1.html", + "slug": "doctrine2-1-1", + "title": "DBAL and ORM 2.1.1 maintenance releases", "authorName": "beberlei", "authorEmail": "", - "contents": "Today we are happy to announce the immediate availability of the second\nbeta version of Doctrine2. This is the first release after the\n[split](https://www.doctrine-project.org/2010/05/27/bringing-it-all-together.html)\nof Doctrine2 into three independent projects, Common, DBAL and ORM. This\nchange took longer than we expected but we are back to our SVN\nproductivity now and strive to surpass it utilizing Git.\n\nBeta 2 is a completely backwards compatible release and over 60 issues\nand bugs have been closed in total. The following larger changes have\nbeen introduced from Doctrine2 Beta 1:\n\nCommon\n======\n\n- Added ClassLoader\\#classExists as well as\n ClassLoader\\#getClassLoader methods\n [DCOM-7](https://github.com/doctrine/common/issues/669)\n- Changes to Annotation Parser with regards to Autoloading Annotation\n Classes\n\nDBAL\n====\n\n- New Driver support for Microsoft PDO Sqlsrv Extension\n [DBAL-10](https://github.com/doctrine/dbal/issues/927)\n- Fixed Mssql/Sqlsrv Platforms and SchemaManager\n [DBAL-8](https://github.com/doctrine/dbal/issues/2031)\n- New Driver and Platform Support for DB2 (PDO\\_DB2 and IBM\\_DB2\n Extensions)\n [DDC-494](https://github.com/doctrine/orm/issues/4999)\n\nORM\n===\n\n- Basic Pessimistic Locking support using FOR UPDATE or vendor\n specific shared locks\n [DDC-178](https://github.com/doctrine/orm/issues/2432)\n- Added a Validate Mapping CLI Task\n [DDC-515](https://github.com/doctrine/orm/issues/5023)\n\nDownload\n--------\n\nYou can get the code a few different ways which are described in detail\n[here](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA2).\nIf you have any issues with Doctrine you can report them on\n[Jira](https://www.doctrine-project.org/jira).\n\nContributions\n-------------\n\nWe thank all the contributors and early adopters for their extensive\nfeedback and reports. If you are interesting in contributing to the\nDoctrine project too, check out our new [contributors\nguide](https://www.doctrine-project.org/contribute) and\n[community](https://www.doctrine-project.org/community) page for\ninformation about how you can get involved!\n", - "date": "2010-06-15 00:00:00" + "contents": "We released the DBAL and ORM 2.1.1 maintenance versions today that\nseveral issues with both packages. You can see the changelog of both\npackages on Jira:\n\n- [ORM Changelog (22 issues\n fixed)](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10153)\n- [DBAL Changelog (4 issues\n fixed)](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10156)\n\nPlease report any problems with these packages to the Jira tracker or\nthe mailing list.\n\nYou can download the packages through PEAR or our download sections\nwithin each project.\n", + "date": "2011-08-26 00:00:00" }, { - "url": "/2009/11/23/new-doctrine-core-team-member.html", - "slug": "new-doctrine-core-team-member", - "title": "New Doctrine Core Team Member", - "authorName": "jwage", + "url": "/2012/01/03/doctrine2-2-beta2.html", + "slug": "doctrine2-2-beta2", + "title": "Doctrine 2.2 Beta 2", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "Today I am very excited to announce to you all that we have officially\ninvited Benjamin Eberlei, also known as beberlei in IRC, to join the\ncore Doctrine team. He has steadily contributed to Doctrine 2 and has\nbeen very helpful. We are confident that he will be a great new addition\nto the team.\n\nBenjamin is a contributor to the Zend Framework as well so he will be\nresponsible for leading the integration between the projects. You can\nread a little more about Benjamin on his [about\npage](https://www.doctrine-project.org/contributor/beberlei).\n", - "date": "2009-11-23 00:00:00" + "contents": "Sadly we did not manage to hold our schedule with a 2.2 release in 2011,\nwe had to do some larger changes before the final release. This means we\nare releasing another Beta of Doctrine DBAL and ORM. The final release\nis rescheduled to 19th January.\n\n- DBAL Changelog\n \\<[https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10189](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10189)\\>\\`\\_\n- ORM Changelog\n \\<[https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10188](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10188)\\>\\`\\_\n\nPlease try and test this code with your production applications and\nreport any backwards compatibility breaks to the [Bug\nTracker](https://www.doctrine-project.org/jira) or the Mailing List. See\nthe\n[UPGRADE\\_2\\_2](https://github.com/doctrine/orm/blob/master/UPGRADE.md#upgrade-to-22)\nfile to see backwards incompatible changes.\n\nYou can install the Beta through\n[Github](https://github.com/doctrine/orm) ,\n[PEAR](http://pear.doctrine-project.org) by download or through\n[Composer](https://packagist.org):\n\n> {\n> : \"require\": { \"doctrine/orm\": \"2.2.0-BETA2\" }\n>\n> }\n", + "date": "2012-01-03 00:00:00" }, { - "url": "/2008/06/16/getting-started-with-doctrine-and-symfony-1-1.html", - "slug": "getting-started-with-doctrine-and-symfony-1-1", - "title": "Getting started with Doctrine and symfony 1.1", + "url": "/2008/04/21/0-11-0-release-candidate-1.html", + "slug": "0-11-0-release-candidate-1", + "title": "0.11.0 Release Candidate 1", "authorName": "jwage", "authorEmail": "", - "contents": "Today, over on the symfony-project blog. A short tutorial on how to get\nstarted using Doctrine and symfony 1.1 has been published. As of symfony\n1.1, Doctrine is officially supported by symfony and this is the first\nstep of many to make Doctrine the default ORM in symfony. Over the\ncoming months, much of the symfony + Propel documentation will be ported\nto work with Doctrine. The tutorial can be read here.\n", - "date": "2008-06-16 00:00:00" + "contents": "\n\nToday I am happy to announce the first release candidate for the next\nmajor version of Doctrine, 0.11. The 0.11 version of Doctrine brings\nover 50 addressed tickets, a few new features, a few performance\nimprovements and lots of updates to the documentation/manual.\n\n
\n\n\u00a0\n\n
\n\nHere are the highlights:\n\n
\n\n- \\*Table.php classes are no longer generated by default when\n generating models from an existing database schema. This also means\n that ATTR\\_AUTOLOAD\\_TABLE\\_CLASSES now defaults to FALSE\n\n
\n\n> - Fixed some serious hydration bugs.\n\n
\n\n> - Improved the hydration performance for large (joined) result sets.\n\n
\n\n> - Application-level cascading deletes are back.\n\n
\n\n> We encourage everyone to test this release candidate thoroughly.\n> Please report any issues through trac.\n\n
\n\n> You can view the complete changelog for this release here.\n\n
\n\n\n", + "date": "2008-04-21 00:00:00" }, { - "url": "/2011/06/18/doctrine-2-1-rc1.html", - "slug": "doctrine-2-1-rc1", - "title": "Doctrine 2.1 Release Candidate 1", - "authorName": "beberlei", + "url": "/2013/11/12/doctrine-2-4-1.html", + "slug": "doctrine-2-4-1", + "title": "Doctrine 2.4.1 released", + "authorName": "Benjamin Eberlei", "authorEmail": "", - "contents": "Doctrine 2.1 is feature complete and we packaged up the first release\ncandidate to celebrate this day. So far we got exactly one backwards\ncompability complaint that was immediately fixed. You only have about 10\ndays to verify that this release candidate is working with your existing\n2.0 code-bases. If you find some problems please report a bug on\n[Jira](https://www.doctrine-project.org). We will provide everyone with\nmugs/tshirts who is finding incompatible changes.\n\nWe plan to release only 1-2 bugfix releases of the 2.0.x branch, which\nshould give you lots of motivation to try out 2.1 with your projects.\n\nWe integrated a pretty substantial Annotation Reader refactoring just\ntoday. Please test if this still works with your code-base using\nannotations. See the [UPGRADE\\_TO\\_2\\_1 file](https://github.com/doctrine/orm/blob/master/UPGRADE.md#upgrade-to-21)\nfor some information. You might need to adjust your bootstrapping code\nto get it working.\n\nThe task now until the final release on june 30th will be to update the\ndocumentation with all the changes that have landed in Doctrine 2.1. We\nalready created a 2.0.x branch of the docs that will freeze the current\nstate for those staying on 2.0. Additionally we will squash all the last\nbugs that we find.\n\nGrab the new code in the downloads section or on our [PEAR\nchannel](http://pear.doctrine-project.org)\n", - "date": "2011-06-18 00:00:00" + "contents": "Today we released Doctrine DBAL 2.4.1 and ORM 2.4.1 versions. It\nincludes an important fix for a regression with array hydration. In\ntotal 6 tickets have been closed in both releases.\n\nSee all the changes:\n\n- [Doctrine ORM v2.4.1\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10528)\n- [Doctrine DBAL v2.4.1\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10527)\n\nInstallation\n============\n\nYou can install Doctrine using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/common\": \"2.4.*\",\n \"doctrine/dbal\": \"2.4.1\",\n \"doctrine/orm\": \"2.4.1\"\n }\n}\n~~~~\n", + "date": "2013-11-12 00:00:00" }, { - "url": "/2011/05/14/doctrine-maintenance-may11.html", - "slug": "doctrine-maintenance-may11", - "title": "Maintenance Releases 2.0.5 for DBAL and ORM", - "authorName": "beberlei", + "url": "/2010/05/27/bringing-it-all-together.html", + "slug": "bringing-it-all-together", + "title": "Bringing it all together", + "authorName": "jwage", "authorEmail": "", - "contents": "Slightly behind schedule we released the next round of maintenance\nversions of Doctrine DBAL (2.0.5) and ORM (2.0.5) today. It also\nincludes a Security fix for DBAL in combination with PDO MySQL and\ncharsets that was closed in PHP 5.3.6. If you are using 5.3.6, you\nshould now use the \"charset\" option in DriverManager::getConnection()\ninstead of the MysqlSessionInit listener.\n\n- [DBAL Changelog (4 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10132)\n- [ORM Changelog (15 Tickets\n closed)](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10133)\n\nYou can grab the packages from the download page or our [Github\nrepository](https://github.com/doctrine).\n\nPlease report any problems to the Jira Bugtracker.\n", - "date": "2011-05-14 00:00:00" + "contents": "Recently we've been making some pretty serious changes around here. This\nblog post aims to overview it all and make sure people are aware of what\nis going on!\n\nWebsite Changes\n===============\n\nA few weeks ago I made some\n[updates](https://www.doctrine-project.org/blog/a-few-website-changes) to\nthe Doctrine website. Some said it looked like we took a step backwards.\nWell, we kind of did. I had to rip apart the website, remove old legacy\ncode and reorganize things so that it can be integrated with the changes\nwe wanted to make next. So I've sort of had to tear it all apart and put\nit back together a new way. It's been a bumpy road but we're starting to\nget the remaining issues worked out.\n\nThe Switch to git\n=================\n\nThe next big change we wanted to make was to switch to\n[github.com](https://www.doctrine-project.org) for our source control.\nThis has a lot of impact on the project since everything is built around\nthe source control, including the website. That is why the previous\nchange was necessary in order to make this move complete.\n\nSplitting Doctrine 2 Sources\n============================\n\nThe next step for us was to split the Doctrine 2 sources into separate\nrepositories on github. So now the source code of the Common, DBAL, and\nORM packages are truly separated.\n\n- [Common](https://github.com/doctrine/common)\n- [DBAL](https://github.com/doctrine/dbal)\n- [ORM](https://github.com/doctrine/orm)\n\nThis means the packages can evolve independently and will be maintained\nseparately from now on. The website also has dedicated project pages for\nthe [DBAL](https://www.doctrine-project.org/projects/dbal) and\n[ORM](https://www.doctrine-project.org/projects/orm) with plenty of\ndocumentation.\n\nBringing it all together\n========================\n\nThe last piece that brings it all together is the new [Guide for\nDoctrine Contributors and\nCollaborators](https://www.doctrine-project.org/contribute). Now that\nwe've moved to git we had to reinvent a lot of stuff we had already\nlearned for SVN. Thanks to our git mentor David Abdemoulaie\n([hobodave](https://www.twitter.com/hobodave)) we have figured out a\nworkable solution for dealing with the project dependencies via git\nsubmodules that does most of what we want. Through this process we all\nworked on some new documentation that detailed how contributors and\ncollaborators for the Doctrine Project should work. We really hope that\nthis will help get people involved with the project and mature things\nmore.\n", + "date": "2010-05-27 00:00:00" }, { - "url": "/2016/09/10/orm-2-5-5.html", - "slug": "orm-2-5-5", - "title": "Doctrine ORM 2.5.5 Released", + "url": "/2015/12/25/orm-2-5-3.html", + "slug": "orm-2-5-3", + "title": "Doctrine ORM 2.5.3 Released", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine ORM\n[2.5.5](https://github.com/doctrine/orm/releases/tag/v2.5.5).\n\nFollowing issues were fixed:\n\n> - Embeddable classes are now allowed in inheritance trees\n> [\\#4097](https://github.com/doctrine/orm/issues/4097)\n> - Removed some object hash collisions caused by entity merging\n> [\\#1465](https://github.com/doctrine/orm/pull/1465)\n> - Allowed usage of mathematical operators in DQL `HAVING` clauses\n> [\\#5598](https://github.com/doctrine/orm/pull/5598)\n> - Fixed cloning of proxies with private properties at multiple\n> inheritance levels\n> [\\#5755](https://github.com/doctrine/orm/pull/5755)\n> - Entity insertions are correctly cleared when a specific entity is\n> to be cleared\n> [\\#5849](https://github.com/doctrine/orm/issues/5849)\n> - Corrected hydration of fetch-joins that use composite keys\n> [\\#5762](https://github.com/doctrine/orm/issues/5762)\n> - Metadata exporters now only export the owning side metadata in a\n> one-to-one relation\n> [\\#5858](https://github.com/doctrine/orm/issues/5858)\n> - Corrected hydration of JTI entities when `NULL` is retrieved for a\n> `simple_array` or `json_array` field\n> [\\#5989](https://github.com/doctrine/orm/issues/5989)\n> - Correctly expire L2 cache query caches, based on entity region\n> cache timestamp\n> [\\#6001](https://github.com/doctrine/orm/issues/6001)\n\nInstallation\n============\n\nYou can install the ORM component using Composer:\n\n```bash\ncomposer require doctrine/orm:^2.5.5\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/orm/issues).\n", - "date": "2016-09-10 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n[2.5.3](https://github.com/doctrine/orm/releases/tag/v2.5.3).\n\nDependency constraints on the\n[doctrine/common](https://github.com/doctrine/common) component\nsupported versions were corrected, allowing users to install\n`doctrine/common` version `2.6.*` together with the ORM. This also means\nthat PHP 7 scalar type-hints and return type declarations are now\nreflected in the generated proxy classes.\n[\\#4884](https://github.com/doctrine/orm/issues/4884)\n\nMerging versioned entities caused the merged instance to have a `null`\nversion: this is now fixed.\n[\\#1573](https://github.com/doctrine/orm/issues/1573)\n\nIt was impossible to use interface names when referencing entity types\nin DQL: it is now possible to do so when using the\n[ResolveTargetEntityListener](https://github.com/doctrine/orm/blob/v2.5.3/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php).\n[\\#1573](https://github.com/doctrine/orm/issues/1573)\n\nInstallation\n============\n\nYou can install the ORM component using Composer:\n\n```bash\ncomposer require doctrine/orm:~2.5.3\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/orm/issues).\n", + "date": "2015-12-25 00:00:00" }, { - "url": "/2009/09/14/moving-to-jira.html", - "slug": "moving-to-jira", - "title": "Moving to JIRA", - "authorName": "romanb", + "url": "/2007/11/02/beta-2.html", + "slug": "beta-2", + "title": "Beta 2", + "authorName": "jwage", "authorEmail": "", - "contents": "While we really like Trac, especially its subversion integration, it has\na lot of shortcomings for bigger projects in the area of project &\nissue/ticket management. Hence we decided to evaluate alternatives and\nended up with choosing [JIRA](https://www.atlassian.com/software/jira).\nIts normally not free software but the generous guys from Atlassian\ngranted us a free open source license. A big thanks from all of us to\nAtlassian for their support of open source projects.\n\nFrom now on all the project management, release management and\nissue/ticket management will happen in our [new JIRA\ninstance](https://www.doctrine-project.org/jira). While it is open for\neveryone in read-only mode, we strongly encourage you to create an\naccount soon so that you can create/modify/comment issues and content in\nJIRA.\n\nTrac is from now on closed for tickets. All new tickets need to be\nreported through JIRA. We are not going to automatically import all\ntickets from Trac to JIRA because that does not work very well and would\nrequire to import all user accounts as well, which can not be done\neasily either. We will continue to work on the \"old\" tickets, always\nstarting with porting a ticket over to JIRA before working on it. If you\nwant to help, you recreate tickets that are especially important to you\nin JIRA yourself. You can still log in to Trac and view tickets for the\npurpose of migrating them to JIRA but you can not modify them or create\nnew ones.\n\n> **CAUTION** When you recreate an issue in JIRA, please make sure you\n> close the issue in Trac with the resolution: \"migrated\".\n\nTrac will not be completely shut down, however. The following\nfunctionality will stay open:\n\n- Wiki\n- Timeline\n- Browse Source\n\nThat is, the wiki and the subversion integration. We basically use Trac\nas the subversion viewer that we coupled with JIRA. Any changeset\nnumbers or file references in JIRA issues will link to the\nchangesets/sources in Trac.\n\nWe're looking forward to working with JIRA and we think it is an\nimprovement for all users. We hope you enjoy all the new functionality\nprovided by JIRA, like voting for issues that are important to you,\ntracking issues and much more.\n\nSo, head over to our [JIRA instance](https://www.doctrine-project.org/jira) ,\ncreate an account and start creating issues and explore the features.\n", - "date": "2009-09-14 00:00:00" + "contents": "The Doctrine team is proud to announce that we have scheduled the\nrelease of the second beta snapshot for November 31st, 2007. This is\nvery exciting news for the Doctrine team and community.\n\nThis means Doctrine is nearing a real release candidate :) As you all\nknow, we had a RC1 that was released a little while back, but it was a\nmistake to call it an RC since we planned on still making many changes\nthat would break BC. We have corrected ourselves and renamed it Beta1.\nWe will continue with beta releases until we are comfortable with\nreleasing a true RC1.\n", + "date": "2007-11-02 00:00:00" }, { - "url": "/2010/09/01/birthday-release-party.html", - "slug": "birthday-release-party", - "title": "Birthday Release Party", - "authorName": "romanb", + "url": "/2008/08/08/creating-a-unit-of-work-using-doctrine.html", + "slug": "creating-a-unit-of-work-using-doctrine", + "title": "Creating a Unit of Work Using Doctrine", + "authorName": "jwage", "authorEmail": "", - "contents": "Today is Jonathan's birthday and in order to celebrate properly we're\nrolling out three new releases.\n\nDoctrine Common RC1\n===================\n\nThe first release candidate of the Doctrine Common project.\n\n- [Installation](https://www.doctrine-project.org/projects/common/2.0/download/2.0.0RC1)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10081)\n\nDoctrine DBAL BETA4\n===================\n\nThe last beta release of the Doctrine DBAL project.\n\n- [Installation](https://www.doctrine-project.org/projects/dbal/2.0/download/2.0.0BETA4)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10071)\n\nDoctrine ORM BETA4\n==================\n\nThe last beta release of the Doctrine ORM project.\n\n- [Installation](https://www.doctrine-project.org/projects/orm/2.0/download/2.0.0BETA4)\n- [Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10072)\n\nAgain we want to thank everyone who participated in the ongoing\ndevelopment efforts, whether it was through bug reports, comments,\ncritique, praise and/or actual code contributions.\n\nWhat next\n=========\n\nSome might know that we originally planned to release 2.0 stable today\nbut we're simply not there yet. However, things are going quite well and\nwe're confident that the final releases of the 2.0 versions are close.\nThe ORM and DBAL now enter a final phase of bug-fixing to resolve any\nissues we find critical for the final releases and will then follow the\nCommon project into RC (release candidate) status.\n", - "date": "2010-09-01 00:00:00" + "contents": "I am happy to introduce the latest contribution to the 1.0 cookbook,\nCreating a Unit of Work Using Doctrine by Jon Lebensold. Big thanks to\nhim, he reached out to me wanting to contribute something to the project\nso he offered to add this great recipe to the cookbook. It properly\ndemonstrates the unit of work pattern for saving and deleting Doctrine\nobjects. If you are interested in contributing to Doctrine, adding\nsomething to the cookbook is a great way to help out by only giving 1\nhour of your time. Contact me at jonwage [at] gmail.com if you are\ninterested in contributing.\n", + "date": "2008-08-08 00:00:00" }, { - "url": "/2008/07/24/taking-advantage-of-column-aggregation-inheritance.html", - "slug": "taking-advantage-of-column-aggregation-inheritance", - "title": "Taking Advantage of Column Aggregation Inheritance", + "url": "/2009/06/30/doctrine-orm-for-php-available-in-print.html", + "slug": "doctrine-orm-for-php-available-in-print", + "title": "Doctrine ORM for PHP available in print", "authorName": "jwage", "authorEmail": "", - "contents": "Today I have published another tutorial in the 1.0 Cookbook. This recipe\nsolves the same situation where you want to allow address properties on\nmultiple records. This approach is a much more normalized implementation\ncompared to using templates/behaviors and it allows for multiple\naddresses instead of only one. Check it out in the cookbook here. Enjoy!\n", - "date": "2008-07-24 00:00:00" - }, - { - "url": "/2018/07/12/common-2-9-and-dbal-2-8-and-orm-2-6-2.html", - "slug": "common-2-9-and-dbal-2-8-and-orm-2-6-2", - "title": "Phasing out Doctrine Common & release of DBAL 2.8 and ORM 2.6.2", - "authorName": "Michael Moravec", - "authorEmail": "doctrine@majkl.me", - "contents": "### Common 2.9 and phasing out the package\n\nAs another step in the ongoing effort to eliminate `doctrine/common`,\nthere are now three new separate Doctrine packages:\n\n * [`doctrine/persistence`](https://github.com/doctrine/persistence)\n * [`doctrine/event-manager`](https://github.com/doctrine/event-manager)\n * [`doctrine/reflection`](https://github.com/doctrine/reflection)\n\nThis release introduces the following deprecations:\n\n * `Doctrine\\Common\\Proxy` component is deprecated, use\n [`ocramius/proxy-manager`](https://github.com/ocramius/ProxyManager) instead;\n * `Doctrine\\Common\\Util\\Debug` is deprecated, use\n [`symfony/var-dumper`](https://github.com/symfony/var-dumper) instead;\n * `Doctrine\\Common\\Lexer` is deprecated, use `Doctrine\\Common\\Lexer\\AbstractLexer`\n from [`doctrine/lexer`](https://github.com/doctrine/lexer) or migrate to\n [hoa/compiler](https://github.com/hoaproject/Compiler) instead;\n * `Doctrine\\Common\\Util\\Inflector` is deprecated, use `Doctrine\\Common\\Inflector\\Inflector`\n from [`doctrine/inflector`](https://github.com/doctrine/inflector) instead;\n * `Doctrine\\Common\\Util\\ClassUtils` is deprecated without replacement;\n * `Doctrine\\Common\\Version` is deprecated, refrain from checking Common version at runtime;\n * `Doctrine\\Common\\CommonException` is deprecated without replacement.\n\nIn addition to that, there will be no `doctrine/common` 3.0 and the package\nwill be gradually phased out.\n\nVersion 2.x will be maintained at least until ORM 3.0 is released, ensuring\ncompatibility with the latest PHP and providing bugfixes, but it will\nno longer ship any new features.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/common/releases/tag/v2.9.0).\n\n### DBAL 2.8.0\n\nDBAL 2.8.0 is a minor release of Doctrine DBAL that aggregates over\n30 fixes and improvements developed over the last 3 months.\n\nThe dependency on `doctrine/common` is removed. DBAL now\ndepends on `doctrine/cache` and `doctrine/event-manager` instead.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/dbal/releases/tag/v2.8.0).\n\n### ORM 2.6.2\n\nORM 2.6.2 comes as a regular bugfix release.\n\nIt no longer uses the long ago deprecated Lexer and Inflector from `doctrine/common`.\n\nFor complete release notes,\n[visit GitHub](https://github.com/doctrine/orm/releases/tag/v2.6.2).\n", - "date": "2018-07-12 00:00:00" + "contents": "Last night the [Doctrine ORM for\nPHP](https://www.amazon.com/Doctrine-ORM-PHP-Jonathan-Wage/dp/2918390038/ref=sr_1_1?ie=UTF8&s=books&qid=1246303098&sr=8-1)\nbook became available on the Amazon website. This is our first official\npiece of published documentation and we are very excited and proud to\nsee this.\n\nIf you are an existing or new Doctrine user, it is much appreciated if\nyou purchase a copy. Since Doctrine is an open source project we don't\nmake any money directly from it. Doctrine is all possible because of the\ncontributors and the companies that fund it, like [Sensio\nLabs](https://sensiolabs.com). So it is a very nice gesture, even if\nyou are already a Doctrine expert, to purchase a copy of the book to\nshow your appreciation and support for the project.\n", + "date": "2009-06-30 00:00:00" }, { - "url": "/2013/11/12/doctrine-2-4-1.html", - "slug": "doctrine-2-4-1", - "title": "Doctrine 2.4.1 released", - "authorName": "Benjamin Eberlei", + "url": "/2009/10/06/doctrine-1-2-nearing-stable-release.html", + "slug": "doctrine-1-2-nearing-stable-release", + "title": "Doctrine 1.2 Nearing Stable Release", + "authorName": "jwage", "authorEmail": "", - "contents": "Today we released Doctrine DBAL 2.4.1 and ORM 2.4.1 versions. It\nincludes an important fix for a regression with array hydration. In\ntotal 6 tickets have been closed in both releases.\n\nSee all the changes:\n\n- [Doctrine ORM v2.4.1\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10528)\n- [Doctrine DBAL v2.4.1\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10527)\n\nInstallation\n============\n\nYou can install Doctrine using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/common\": \"2.4.*\",\n \"doctrine/dbal\": \"2.4.1\",\n \"doctrine/orm\": \"2.4.1\"\n }\n}\n~~~~\n", - "date": "2013-11-12 00:00:00" + "contents": "Today I am happy to release to you the second ALPHA release of Doctrine\n1.2. Honestly, we didn't receive many reports of regressions or problems\nwith the new things in Doctrine 1.2 and we know lots of people have\nupgraded and using it so we feel it is a pretty stable release already.\n\nYou can view what all changed in this release by checking the\n[changelog](https://www.doctrine-project.org/change_log/1_2_0_ALPHA2) and\nyou can snag it from the\n[download](https://www.doctrine-project.org/download) page.\n\nWe hope that everything goes fine from here and the next release will be\nBETA1 followed by an RC and stable release. Please give 1.2 a try and\nreport any regressions to us so that we can be sure to get them fixed\nbefore the final stable release.\n", + "date": "2009-10-06 00:00:00" }, { - "url": "/2009/10/07/doctrine-2-documentation.html", - "slug": "doctrine-2-documentation", - "title": "Doctrine 2 Documentation", + "url": "/2009/06/26/what-s-new-in-doctrine-1-2.html", + "slug": "what-s-new-in-doctrine-1-2", + "title": "What's new in Doctrine 1.2", "authorName": "jwage", "authorEmail": "", - "contents": "Did you know that Doctrine 2 is already very well documented? I've\nnoticed recently that some people seem to think we don't have any\ndocumentation for it, and that upgrading will not be possible for many\nmonths to come.\n\nWe have an almost complete manual on Doctrine 2 which is the same\nconcept of \"Guide to Doctrine for PHP\" for Doctrine 1. It covers all the\ncore concepts of Doctrine 2 as well as information on how to get\nstarted, code examples, best practices, etc.\n\nThe Guide to Doctrine for PHP starts off with the following chapters...\n\n- [Introduction](https://www.doctrine-project.org/projects/doctrine-orm/en/current/tutorials/getting-started.html)\n- [Architecture](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/architecture.html)\n- [Configuration](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/configuration.html)\n- [Basic\n Mapping](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/basic-mapping.html)\n- [...and\n more](https://www.doctrine-project.org/projects/doctrine-orm/en/current/)\n\nThe following chapters have been completed and updated recently...\n\n- [Events](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/events.html)\n- [Tools](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html)\n\nWe also have a cookbook with a few articles already too...\n\n- [Implementing ArrayAccess for domain\n objects](https://www.doctrine-project.org/projects/doctrine-orm/en/current/cookbook/implementing-arrayaccess-for-domain-objects.html)\n- [Implementing the NOTIFY changetracking\n policy](https://www.doctrine-project.org/projects/doctrine-orm/en/current/cookbook/implementing-the-notify-changetracking-policy.html)\n\nWe hope this helps you a little bit with getting started using Doctrine\n2 and that you enjoy it! :)\n", - "date": "2009-10-07 00:00:00" + "contents": "This week I have been working on the next major version of Doctrine,\n1.2. This version will possibly be the last 1.x version before we really\nbegin to push 2.0 hard.\n\nThe 1.2 release should be a decent release for you all and I think it\nhas some interesting features that should really spark some growth in\nthe community around Doctrine. Here are some highlights.\n\nHighlights\n==========\n\n- Major cleanup, removing deprecated methods, removed accessor string\n support for performance fix\n- Option to disable cascading saves by default for performance\n improvement\n- Changes to migrations to better handle migrating multiple databases\n- More configuration options\n- Configure a child `Doctrine_Query` class to use\n- Configure a child `Doctrine_Collection` class to use\n- Refactored hydration implementation to be completely driver based\n- Write your own hydration drivers to process query statements\n- Refactored Doctrine connections to be completely driver based\n- Write your own connection drivers for Doctrine\n- Other small changes and improvements across the code base\n\nDoctrine Extensions\n===================\n\nAll the above changes lend themselves well to creating extensions and\nbehaviors for Doctrine. This has led to the creation of the Doctrine\n[extensions](https://www.doctrine-project.org/extensions) repository.\n\nYou can now write standalone code bundled as a Doctrine extension that\ncan be dropped in to an extensions folder and loaded by Doctrine. So now\nwhen you all write custom behaviors and custom extensions you can make\nthem available for other people to use and drop in to projects.\n\nI have started the repository by committing the\n[Sortable](https://www.doctrine-project.org/extension/Sortable/1_2-1_0)\nbehavior which was contributed by a Doctrine user on our trac. So\nwhoever you are, if you would like to maintain this extension please\ncontact me.\n\nFollow 1.2 Development\n======================\n\nIf you want to know more about Doctrine 1.2 you can read the [What's new\nin Doctrine 1.2](https://www.doctrine-project.org/upgrade/1_2) document\nwhich will be kept up to date as we develop and change things in 1.2!\n\n> **CAUTION** Some of the implemented features in 1.2 are still being\n> discussed and debated so they may change or be completely removed if\n> decided so. If you have any input or suggestions on the provided\n> features, let us know ASAP.\n", + "date": "2009-06-26 00:00:00" }, { - "url": "/2009/02/03/doctrine-1-0-7-is-available.html", - "slug": "doctrine-1-0-7-is-available", - "title": "Doctrine 1.0.7 is Available!", + "url": "/2008/09/30/get-expert-training.html", + "slug": "get-expert-training", + "title": "Get Expert Training", "authorName": "jwage", "authorEmail": "", - "contents": "Today I have made available [Doctrine\n1.0.7](https://www.doctrine-project.org/download) , the latest bug fix\nrelease for the 1.0 version of Doctrine. This release is a significant\none with a few dozen bugs fixed. Below is a list that highlights some of\nthe fixes.\n\nHighlights\n==========\n\n- [r5361] Fixed NestedSet to not create column for root column if it\n already exists (closes \\#1817)\n- [r5419] Fixes \\#1856. Added checking to schema file to ensure\n correct file extension (format).\n- [r5429] Fixes issue with generated count queries (closes \\#1766)\n- [r5438] Fixes issue with saveRelated() being called too early\n (closes \\#1865)\n- [r5441] Fixing generated models to adhere to coding standard of\n using 4 spaces (closes \\#1846)\n- [r5459] Fixes issue with I18n and column aliases (closes \\#1824)\n\nLots of other fixes have been made in this release so if you want to see\na list of all the changes be sure to check the\n[changelog](https://www.doctrine-project.org/change_log/1_0_7).\n", - "date": "2009-02-03 00:00:00" + "contents": "\n\nToday I am happy to introduce the first training course offered on\nDoctrine 1.0. These courses are brought to you by SensioLabs, the\ncreators of the symfony MVC Framework. In addition to the Doctrine\ncourses they offer ones on symfony and PHP. Below is a list of some of\nthe upcoming events that you can register for today!\n\n
\n\nThe workshops are a three day event and include lunch everyday,\nmid-morning and mid-afternoon snacks, a copy of all the presented\nmaterial on a stick and example code. The workshop runs from 9am -5pm on\nthe first 2 days and from 9am - 4:30pm on the last day. You can learn\nmore about the available training sessions here.\n\n
\n\n\n", + "date": "2008-09-30 00:00:00" }, { - "url": "/2015/12/08/jira-issues-migration.html", - "slug": "jira-issues-migration", - "title": "Jira Issues Migration", - "authorName": "", + "url": "/2008/03/01/0-10-2-released.html", + "slug": "0-10-2-released", + "title": "0.10.2 Released", + "authorName": "jwage", "authorEmail": "", - "contents": "We have started the migration of all our Jira tickets to Github Issues.\n\nThese last months we had a lot of troubles with our Jira and we just\ncannot find the time to update and maintain it anymore. On top of it,\nspam is causing more maintenance for us deleting user accounts and\ntickets. Sadly ther seeems to be no appropriate spam protection plugins\nand we couldn't prevent this.\n\nWe are by no means unsatisfied with Jira, and to be honest we have been\nfighting this migration step as long as possible. Github Issues is a\nsmall fish against Jira's powers, especially issue filtering, bulk\noperations and the Agile board. But for Doctrine its best to migrate to\nGithub to reduce our maintenance and operations overhead and more\ntightly integrate with the tooling we already have.\n\nFor now Common, DBAL and ORM issues have been imported into Github using\nthe [amazing Importer\nAPI](https://gist.github.com/jonmagic/5282384165e0f86ef105). Even though\nthis API is still in Beta, it works quite flawlessly. If you are\ninterested in our migration scripts see [this repository in\nGithub](https://github.com/doctrine/jira-github-issues). They are very\nlow-level and procedural but get the job done.\n\nJira has been changed into Read-Only mode for Common, DBAL and ORM\nprojects, please use the Github based issue trackers instead from now\non:\n\n- [ORM](https://github.com/doctrine/orm/issues)\n- [DBAL](https://github.com/doctrine/dbal/issues)\n- [Common](https://github.com/doctrine/common/issues)\n\nWhat is still missing?\n======================\n\n- Versions from Jira need to be exported and imported into Github\n releases with their release date, changelog and description.\n\n- Permanent redirects for both Jira versions and issues to their\n respective Github counterparts have to be prepared and dynamically\n generated from our webserver, when we decommission Jira. This will\n help us keep deeplinks to Jira issues.\n\n- Cleanup, categorize and prepare the newly imported Github issues.\n\nWe hope to complete this steps this week. The last one will take a bit\nlonger.\n\nWhat we could not import\n========================\n\nWe were not able to import attachments, issue status transitions and\nuser/reporter assignments between Jira and Github. This information will\nbe lost once we disable Jira.\n", - "date": "2015-12-08 00:00:00" + "contents": "Today we have released Doctrine 0.10.2. This is a bug fix only release.\nIt brings many new bugs fixes to the 0.10 branch. We will continue with\npoint releases on the 0.10 branch until the 0.9 branch is completely\nphased out. Thanks for using Doctrine :)\n", + "date": "2008-03-01 00:00:00" }, { - "url": "/2010/05/12/a-few-website-changes.html", - "slug": "a-few-website-changes", - "title": "Website Updates", + "url": "/2008/01/29/using-doctrine-with-codeigniter.html", + "slug": "using-doctrine-with-codeigniter", + "title": "Using Doctrine with CodeIgniter", "authorName": "jwage", "authorEmail": "", - "contents": "As you probably already noticed, the Doctrine website looks a little bit\ndifferent. In preparation for the Doctrine 2.0 release, the website\nneeded to be improved a little bit to better handle the multiple\nversions and projects under the Doctrine umbrella. Along the way I did a\nlittle spring cleaning of some code from the early Doctrine days as\nwell!\n\nYou can now find dedicated sections of the website for both the Object\nRelational Mapper and Database Abstraction Layer projects:\n\n- [ORM Project](https://www.doctrine-project.org/projects/orm)\n- [DBAL Project](https://www.doctrine-project.org/projects/dbal)\n\nThe new website also introduces a new API Documentation thanks to [PHP\nDoctor](http://peej.github.com/phpdoctor/)!\n\n- [Doctrine 2 ORM API\n Documentation](https://www.doctrine-project.org/projects/orm/2.0/api)\n- [Doctrine 2 DBAL API\n Documentation](https://www.doctrine-project.org/projects/dbal/2.0/api)\n\nIf you have any problems with the website please let me know by e-mail\nat jonwage [at] gmail.com.\n", - "date": "2010-05-12 00:00:00" + "contents": "If you use the PHP MVC framework, CodeIgniter, and want to use Doctrine,\nhere is a tutorial on how to integrate Doctrine with your CodeIgniter\napplications. It was fairly simple and took me about 15 minutes to\nfigure out a nice and clean implementation. The wiki page can be found\nhere.\n", + "date": "2008-01-29 00:00:00" }, { - "url": "/2010/12/12/doctrine2-orm-rc2-released.html", - "slug": "doctrine2-orm-rc2-released", - "title": "Doctrine DBAL RC5 and ORM RC2 released", - "authorName": "beberlei", + "url": "/2008/08/25/pre-1-0-updates-and-1-0-0-rc1-released.html", + "slug": "pre-1-0-updates-and-1-0-0-rc1-released", + "title": "Pre 1.0 Updates and 1.0.0-RC1 Released", + "authorName": "jwage", "authorEmail": "", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL RC5\nand Doctrine ORM RC2. There have been almost only minor bugfixes in both\npackages that came up in the last week.\n\nThere is one notable change in ORM: If you execute a DQL Query before\nRC2 a flush would be issued on the EntityManager if there were pending\ninsertions. This flush has now been removed. It was never documented to\nbe executed, so we don't think this will cause major pain to anyone.\nJust make sure to call flush explicitly whenever you need it.\n\nSee the changelogs for both projects:\n\n- [DBAL RC5\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10113)\n- [ORM RC2\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10112)\n\nBoth DBAL and ORM are essentially bug-free. All the still open bug\nreports are either:\n\n- Improvement/feature requests (only marked as bug)\n- Minor and will be fixed in 2.1, because they need some refactorings.\n We will make sure that they appear in the Known Issues section\n before the final release.\n- Some trivial bugs in Tools/Console namespace that don't affect the\n core of the ORM. We are waiting for more feedback on those issues.\n\nExpect these Release Candidates to be tagged as final if no critical or\nmajor issues are discovered in the next week.\n\nYou can grab the code from our [downloads\nsection](https://www.doctrine-project.org/projects) or [directly from\nGithub](https://github.com/doctrine/orm/commits/2.0.0RC2).\n\nIn these last days before the final release we will focus on the\ndocumentation. As you might have noticed we already switched the ORM\ndocumentation to be rendered with Sphinx and ReStructured Text. You are\nnow able to search the docs. We will update the layout to be more\nDoctrine friendly and migrate the other packages to Sphinx/ReST in the\nnext days.\n", - "date": "2010-12-12 00:00:00" + "contents": "\n\nToday we have a few updates for the project to announce. You can read\nabout whats new below.\n\n
\n\nDoctrine Release Candidate 1 Released\n\n
\n\nThe first release candidate of Doctrine 1.0 has been made available.\nDoctrine 1.0 is still scheduled to be released on September 1st 2008.\nYou can download Doctrine here.\n\n
\n\nNew Domain! www.doctrine-project.org\n\n
\n\nWe have decided to ditch the old phpdoctrine.org domain in favor of\ndoctrine-project.org. The main reason is due to licensing complications\nand us not being technically allowed to have the name PHP in our project\nname.\n\n
\n\nMinor Website Ideas\n\n
\n\nWe have updated the website with some minor asthetic changes, primarily\nto the homepage.\n\n
\n\n\n", + "date": "2008-08-25 00:00:00" }, { - "url": "/2010/02/18/symfony-live-2010.html", - "slug": "symfony-live-2010", - "title": "Symfony Live 2010", + "url": "/2008/06/21/doctrine-in-your-language.html", + "slug": "doctrine-in-your-language", + "title": "Doctrine in your language", "authorName": "jwage", "authorEmail": "", - "contents": "This past week I had the pleasure of spending time in Paris, France for\nthe [2010 Symfony Live](https://live.symfony.com/) conference. My\nfirst Symfony event was [Symfony Camp](http://www.symfonycamp.com) in\n2008 which was a great success. I also attended the first Symfony Live\nlast year where I spoke about [Sympal](http://www.sympalphp.org) and\nDoctrine. This time around the Symfony conference was an even bigger\nsuccess! The community around Symfony and Doctrine has grown a great\namount over the years and the event shows that! Many great speakers and\ntopics were present at the conference and it was very exciting to get to\nbe a part of it.\n\nOn the first day of the conference I was invited to speak about the\nlatest Doctrine 2! This is perfect timing as Fabien Potencier made\navailable the source code of [Symfony\n2](http://www.symfony-reloaded.org) the following day. I am very excited\nabout what the future holds for PHP in the coming years as Symfony 2 and\nDoctrine 2 are really revolutionary PHP projects!\n\nYou can find the presentations given at the conference related to\nDoctrine below:\n\n- [Using Doctrine\n Migrations](https://www.slideshare.net/denderello/symfony-live-2010-using-doctrine-migrations)\n- [Doctrine 2: Not the same Old PHP\n ORM](https://www.slideshare.net/jwage/doctrine-2-not-the-same-old-php-orm)\n\n", - "date": "2010-02-18 00:00:00" + "contents": "I have been waiting for this day for some time, the day we have the\nmanual in a 2nd language. For many months the website has been capable\nof handling multiple languages but the features have not been exposed\nuntil now. Thanks to Masaki and Takeshi, two very experienced Japanese\nsymfony + Doctrine developers, we now have the Doctrine manual available\nin Japenese. The primary text of the website will also be translated in\nthe following weeks. If you are interested in having the Doctrine\nwebsite and manual in your language, please contact me so we can make\narrangements for you to have access to easily provide translations.\n", + "date": "2008-06-21 00:00:00" }, { - "url": "/2009/07/27/doctrine-1-0-11-and-1-1-3-released.html", - "slug": "doctrine-1-0-11-and-1-1-3-released", - "title": "Doctrine 1.0.11 and 1.1.3 Released", + "url": "/2008/07/20/doctrine-gets-its-first-employee.html", + "slug": "doctrine-gets-its-first-employee", + "title": "Doctrine gets its first employee", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am happy to introduce two new maintenance releases for Doctrine,\n1.0.11 and 1.1.3. As always these are regular maintenance releases and\ncontain dozens of bug fixes. Below you will find links to view the\nchangelogs for both releases.\n\n- [Doctrine 1.0.11\n Changelog](https://www.doctrine-project.org/change_log/1_0_11)\n- [Doctrine 1.1.3\n Changelog](https://www.doctrine-project.org/change_log/1_1_3)\n\nIt is recommended that you upgrade as soon as possible. You can download\nthe new versions from the\n[download](https://www.doctrine-project.org/download) page.\n", - "date": "2009-07-27 00:00:00" + "contents": "\n\nStarting in September 2008, I will begin working full-time on Doctrine!\nThis great opportunity has been allowed by Sensio, the creators of the\nsymfony MVC Framework. This arrangement will allow many great new things\nto happen for Doctrine. Below you will find a list of some of the things\nyou can look forward to:\n\n
\n\nThis is also good news for the symfony project as it is due to\nofficially support Doctrine as its primary ORM in future versions. I\nwill also be helping the core symfony team with the official integration\nof Doctrine with sfDoctrinePlugin.\n\n
\n\n\n", + "date": "2008-07-20 00:00:00" }, { - "url": "/2008/07/21/plug-and-play-schema-information-with-templates.html", - "slug": "plug-and-play-schema-information-with-templates", - "title": "Plug and Play Schema Information With Templates", - "authorName": "jwage", + "url": "/2011/03/06/doctrine-oxm-intro.html", + "slug": "doctrine-oxm-intro", + "title": "A Doctrine OXM Introduction", + "authorName": "richardfullmer", "authorEmail": "", - "contents": "Check out the latest addition to the Doctrine Cookbook. We have added a\nshort little tutorial on how to use Doctrine templates to solve a real\nworld problem to allow Address attributes on many records easily. We\nwill be publishing many more tutorials in the coming weeks. If you're\ninterested in contributing a tutorial please contact me at jonwage [at]\ngmail.com.\n", - "date": "2008-07-21 00:00:00" + "contents": "Greetings programmers!\n\nSome of you may have noticed a new project being hosted by Doctrine's\n[github](https://github.com/doctrine) named [Object XML\nMapper(OXM)](https://github.com/doctrine/oxm). The OXM is the newest\nmember of the Doctrine family, and serves as persistence and marshalling\nframework for PHP objects to XML, and back again. I'd like to take a\nmoment to introduce myself, the company I work for, and the pain points\nbehind the project's inception.\n\nWe at [Opensoft](http://www.opensoftdev.com/) have always been fans of\nopen source software, and love to give back to the community. I recently\nwas required to implement some vendor specific XML within a corporate\nPHP application. The XML itself had the following requirements and pain\npoints:\n\n- 900+ page specification... over 600 unique XML elements.\n- The XML is used as a workflow. Lots of pull xml, alter it slightly,\n and save it back\n- The XML must be available to the end user upon request.\n- Some of the XML had to be able to be sent via POST to other\n services, and parse responses back\n\nWorking with objects is so much better than working with such complex\nXML.\n\nAs a PHP enthusiest and fan of Doctrine, I created a small project that\nwas capable of marshalling, unmarshalling, and persisting PHP objects to\nXML using [Doctrine Common](https://github.com/doctrine/common) package\nas a base, and many ideas from the ORM, and ODM projects. The Java\n[Castor](http://www.castor.org) project also brought a lot of ideas to\ngive a high degree of control to the developer during the\n(un)marshalling process. ClassMetadata is collected for each @XmlEntity\nclass and used to perform the mapping from PHP objects to native XML.\n\nRight now, the API is still quite unstable, but we're working to change\nthat. Currently Doctrine users should find a lot of familiarity between\nOXM and other Doctrine initiatives. We've tried to stay as close to the\nDoctrine ways of doing things as possible. If you feel like this project\ncould help you make working with XML better, please send me a line, fork\nthe project, and send some pull requests!\n\nEnjoy!\n", + "date": "2011-03-06 00:00:00" }, { - "url": "/2015/03/22/data-fixtures-1-0-1.html", - "slug": "data-fixtures-1-0-1", - "title": "Doctrine Data Fixtures 1.0.1", - "authorName": "Sebastien Lavoie", + "url": "/2015/05/22/doctrine-mongodb-odm-release-1-0-0-beta13.html", + "slug": "doctrine-mongodb-odm-release-1-0-0-beta13", + "title": "Doctrine MongoDB ODM release 1.0.0-BETA13", + "authorName": "Maciej Malarz", + "authorEmail": "malarzm@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM 1.0.0-BETA13.\n\nWhat is new in 1.0.0-BETA13?\n============================\n\nAll issues and pull requests in this release may be found under the\n[1.0.0-BETA13 milestone on\ngithub](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.0-BETA13).\nHere is the highlight of most important features:\n\natomicSet and atomicSetArray strategies for top-level collections\n-----------------------------------------------------------------\n\n[\\#1096](https://github.com/doctrine/mongodb-odm/pull/1096) introduces\ntwo new collection update strategies, `atomicSet` and `atomicSetArray`.\nUnlike existing strategies (e.g. `pushAll` and `set`), which update\ncollections in a separate query after the parent document, the atomic\nstrategy ensures that the collection and its parent are updated in the\nsame query. Any nested collections (within embedded documents) will also\nbe included in the atomic update, irrespective of their update\nstrategies.\n\nCurrently, atomic strategies may only be specified for collections\nmapped directly in a document class (i.e. not collections within\nembedded documents). This strategy may be especially useful for highly\nconcurrent applications and/or versioned document classes (see:\n[\\#1094](https://github.com/doctrine/mongodb-odm/pull/1094)).\n\nReference priming improvements\n------------------------------\n\n[\\#1068](https://github.com/doctrine/mongodb-odm/pull/1068) moves the\nhandling of primed references to the Cursor object, which allows ODM to\ntake the skip and limit options into account and avoid priming more\nreferences than are necessary.\n\n[\\#970](https://github.com/doctrine/mongodb-odm/pull/970) now allows\nreferences within embedded documents to be primed by fixing a previous\nparsing limitation with dot syntax in field names.\n\nNew defaultDiscriminatorValue mapping\n-------------------------------------\n\n[\\#1072](https://github.com/doctrine/mongodb-odm/pull/1072) introduces\na `defaultDiscriminatorValue` mapping, which may be used to specify a\ndefault discriminator value if a document or association has no\ndiscriminator set.\n\nNew Integer and Bool annotation aliases\n---------------------------------------\n\n[\\#1073](https://github.com/doctrine/mongodb-odm/pull/1073) introduces\n`Integer` and `Bool` annotations, which are aliases of `Int` and\n`Boolean`, respectively.\n\nAdd millisecond precision to DateType\n-------------------------------------\n\n[\\#1063](https://github.com/doctrine/mongodb-odm/pull/1063) adds\nmillisecond precision to ODM's DateType class (note: although PHP\nsupports microsecond precision, dates in MongoDB are limited to\nmillisecond precision). This should now allow ODM to roundtrip dates\nfrom the database without a loss of precision.\n\nNew Hydrator generation modes\n-----------------------------\n\nPreviously, the `autoGenerateHydratorClasses` ODM configuration option\nwas a boolean denoting whether to always or never create Hydrator\nclasses. As of\n[\\#953](https://github.com/doctrine/mongodb-odm/pull/953), this option\nnow supports four modes:\n\n- `AUTOGENERATE_NEVER = 0` (same as `false`)\n- `AUTOGENERATE_ALWAYS = 1` (same as `true`)\n- `AUTOGENERATE_FILE_NOT_EXISTS = 2`\n- `AUTOGENERATE_EVAL = 3`\n\nSupport for custom DocumentRepository factory\n---------------------------------------------\n\n[\\#892](https://github.com/doctrine/mongodb-odm/pull/892) allows users\nto define a custom repository class via the `defaultRepositoryClassName`\nconfiguration option. Alternatively, a custom factory class may also be\nconfigured, which allows users complete control over how repository\nclasses are instantiated.\n\nCustom repository and factory classes must implement\n`Doctrine\\Common\\Persistence\\ObjectRepository` and\n`Doctrine\\ODM\\MongoDB\\Repository\\RepositoryFactory`, respectively.\n\nStay tuned, there is a lot more to come soon!\n---------------------------------------------\n", + "date": "2015-05-22 00:00:00" + }, + { + "url": "/2016/09/09/dbal-2-5-5.html", + "slug": "dbal-2-5-5", + "title": "Doctrine DBAL 2.5.5 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n[2.5.5](https://github.com/doctrine/dbal/releases/tag/v2.5.5).\n\nThis release contains a huge amount of fixes, specifically:\n\n> - Parsing of SQL strings containing single quotes\n> [\\#842](https://github.com/doctrine/common/pull/842)\n> - Listing foreign key names when no DB name is used (use current DB\n> instead) [\\#856](https://github.com/doctrine/common/pull/856)\n> - Verifying if table names correspond on dropped foreign keys\n> [\\#861](https://github.com/doctrine/common/pull/861)\n> - Quoting identifiers in `DROP` DDL statements\n> [\\#862](https://github.com/doctrine/common/pull/862)\n> - Removing leading slash from database/schema names when using DSNs\n> [\\#863](https://github.com/doctrine/common/pull/863)\n> - Stopped using `template1` as default database in Postgres\n> [\\#2279](https://github.com/doctrine/common/pull/2279)\n> - Allowing `\"path\"` instead of `\"dbname\"` in SQLite connections\n> [\\#2267](https://github.com/doctrine/common/pull/2267)\n> - Correcting DB2 boolean columns schema introspection\n> [\\#2277](https://github.com/doctrine/common/pull/2277)\n> - Correcting OCI8 parameter binding, which was broken by upgrading\n> to PHP 7.0 [\\#2434](https://github.com/doctrine/common/pull/2434)\n> - Quoting reserved table names when using `TRUNCATE`\n> [\\#2270](https://github.com/doctrine/common/pull/2270)\n> - Fixing of DSN parsing when no schema is in the path\n> [\\#2287](https://github.com/doctrine/common/pull/2287)\n> - Correcting query builder, which was adding a `FROM` clause even\n> with no arguments for it\n> [\\#2292](https://github.com/doctrine/common/pull/2292)\n> - Correcting altering primary key with `AUTO_INCREMENT` on MySQL\n> (requires dropping/re-adding PK)\n> [\\#2303](https://github.com/doctrine/common/pull/2303)\n> - Moving DB2 pagination (query modification) offset/limit count\n> result to the end of the results\n> [\\#2310](https://github.com/doctrine/common/pull/2310)\n> - Handling `Throwable` exceptions thrown in\n> `Connection#transactional()`\n> [\\#2390](https://github.com/doctrine/common/pull/2390)\n> - Correcting logging of parameters passed to a statement via\n> `bindParam()`\n> [\\#2440](https://github.com/doctrine/common/pull/2440)\n> - Allowing installation of `symfony/console:^3.0`\n> [\\#2484](https://github.com/doctrine/common/pull/2484)\n> - Correcing MySQLi statements, which were returning `null` instead\n> of `false` on no results\n> [\\#2497](https://github.com/doctrine/common/pull/2497)\n\nInstallation\n============\n\nYou can install the DBAL component using Composer:\n\n```bash\ncomposer require doctrine/dbal:^2.5.5\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/dbal/issues).\n", + "date": "2016-09-09 00:00:00" + }, + { + "url": "/2012/09/17/doctrine-2-3-rc4.html", + "slug": "doctrine-2-3-rc4", + "title": "Doctrine 2.3.0 RC4 released", + "authorName": "beberlei", "authorEmail": "", - "contents": "We are happy to announce the immediate availability Doctrine Data\nFixtures `1.0.1`.\n\nIn all [semver](https://semver.org/) fashion, this is a bug fix release.\n\nWhat is new in 1.0.x?\n=====================\n\nPlease report any issues you may have with the update on\n[Github](https://github.com/doctrine/data-fixtures/issues).\n\n- Added Travis:\n [69c2230](https://github.com/doctrine/data-fixtures/commit/69c2230dd15413cac013626729c30923632cf313)\n- Now supports table quoting for dropping joined tables:\n [\\#180](https://github.com/doctrine/data-fixtures/pull/180)\n- Fixed ProxyReferenceRepository which was forcing to have a getId:\n [8ffac1c](https://github.com/doctrine/data-fixtures/commit/8ffac1c63f34124f693b93889fa32f4036eb241b)\n- Fixed identifiers retrieval on ReferenceRepository if Entity is not\n yet managed my UnitOfWork:\n [dfc0dc9](https://github.com/doctrine/data-fixtures/commit/dfc0dc9a3f6258c878768218fe49cc092ea8a8d1)\n- Doctrine dependencies relaxed:\n [83a910f](https://github.com/doctrine/data-fixtures/commit/83a910f62b01715f3ed7317f5a4996417a698177)\n- Fix purging non-public schema tables:\n [\\#171](https://github.com/doctrine/data-fixtures/pull/171)\n\nRelease RoadMap\n===============\n\nWe expect to release following versions containing the pending patches\nin the next days:\n\n> - `1.1.0` on `2015-03-26`\n> - `1.2.0` within `2015-04`\n\nPlease note that these dates may change depending on the availability of\nour team.\n", - "date": "2015-03-22 00:00:00" + "contents": "**17.9.2012**\n\nWe released another release candidate of our upcoming Doctrine 2.3.0\nversion. This includes the Common, DBAL and ORM packages.\n\nThis release trys to keep backwards compatibility to every previous\nrelease as much as possible, however some slight changes might be\nnecessary to your applications. See the UPGRADE files of each project\nfor details:\n\n- [ORM](https://github.com/doctrine/orm/blob/master/UPGRADE.md)\n- [DBAL](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\n\nSee the [2.3 Beta blog\npost](https://www.doctrine-project.org/2012/07/16/doctrine-2-3-beta.html) for\nsome information about changes in 2.3.\n\nYou can install the release candidate through\n[Github](https://github.com/doctrine/orm) or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.0-RC4\"\n },\n \"minimum-stability\": \"dev\"\n }\n\nIf you find any problems with your applications please report them on\nour [bugtracker](https://www.doctrine-project.org/jira).\n\nWe hope to release the final version of Doctrine 2.3 after this release\ncandidate. Please test your applications with this.\n", + "date": "2012-09-17 00:00:00" }, { - "url": "/2019/05/21/monetizing-open-source.html", - "slug": "monetizing-open-source", - "title": "Monetizing Open Source", - "authorName": "Jonathan H. Wage", - "authorEmail": "jonwage@gmail.com", - "contents": "In our quest to make Doctrine financially sustainable, we have created\nDoctrine Company, LLC under which the team can conduct business. We've had a strong\n10 years of open source success but we believe that in order for Doctrine to be\ntruly sustainable and to last another decade, we need to diversify and monetize\nthe project. It is our goal to be able to generate enough money through the project\nto fund full or part time work on the project. Below you will find details of some\nof our monetization efforts.\n\n## Patreon\n\nPatreon is a platform that allows open source maintainers, artists, creators, etc. to create\nrelationships with their users and offer them benefits for becoming a patron.\n\nIf you would like to make a donation to the project, Patreon is the place to do it.\nDepending on the tier, we offer a few different benefits:\n\n- A mention on Twitter.\n- Your name and website link on the Doctrine website.\n- Priority responses to Stack Overflow or GitHub issues/PRs.\n- Placement on a [Partners](/partners.html) page on the Doctrine website, with your logo, link, and a paragraph advertising your company's services.\n\n[Become a Patreon](https://www.patreon.com/phpdoctrine) of Doctrine today!\n\n## Consulting\n\nUnder the Doctrine Company, we are providing [consulting and training](/consulting.html)\nservices to companies that use PHP. The services we offer are not limited to Doctrine itself.\nOur team specializes in producing high quality PHP. Whether you are starting a new project or\nmodernizing a legacy application, we can help your team level up their skills with tools\nlike the following:\n\n- [Doctrine DBAL](/projects/dbal.html) - Connect to your favorite RDBMS using Doctrine's database abstraction library.\n- [Doctrine Database Migrations](/projects/migrations.html) - Safely manage your database schema and keep it up to date.\n- [Doctrine ORM](/projects/orm.html) - Represent your domain model cleanly with plain old PHP objects and ensure the integrity of your data.\n- [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) - Keep aesthetic debates out of your code reviews by adopting a coding standard and enforcing it in your build process. We can help integrate Doctrine's own [coding standard](/projects/coding-standard.html) into your project or help codify your own.\n- [Psalm](https://psalm.dev/) / [PHPStan](https://github.com/phpstan/phpstan) - Statically analyze your codebase and find bugs that would otherwise only be found at runtime in production.\n\nIf you are interested, take a look at our [Consulting](/consulting.html) page or contact\nus at [consulting@doctrine-project.org](mailto:consulting@doctrine-project.org) for more\ninformation.\n\n## Events\n\nWe will host regular monthly webinars using [Zoom](https://zoom.us/). Each month we will have different topics\npresented to you by members of the Doctrine Core team or greater PHP community. We already have\nsome great topics lined up for the next few months:\n\n- [Doctrine for Beginners on June 25th](/events/2/doctrine-for-beginners.html)\n- [Getting Started with Doctrine MongoDB ODM on July 16th](/events/3/getting-started-with-doctrine-mongodb-odm.html)\n- [PHP Internals for the Inquisitive Developer on September 10th](/events/1/php-internals-for-the-inquisitive-developer.html)\n\n## Tidelift\n\n[Tidelift](https://tidelift.com) is a managed open source subscription service backed by\ncreators and maintainers. Development teams get better maintained open source. Maintainers\nget paid.\n\nWe have partnered with Tidelift as a maintainer to guarantee a high level of maintenance for their\ncustomers. In return, Tidelift pays Doctrine maintainers a percentage of what the customer pays.\nTidelift is attempting to create a marketplace of open source maintainers and customers with the\ngoal of providing higher levels of confidence for commercial entities when using open source. This\ncan sometimes be one of the biggest challenges for using open source in the corporate world.\nTidelift is taking a unique approach to solving this problem and we are excited to be a part of it!\n\n## Carbon Ads\n\nOne of the most valuable assets we have besides software is our website and the traffic we\nreceive every month. You may have noticed some subtle ad placements on our website. These\ntext-based ads are provided by [Carbon Ads](https://www.carbonads.net/) which is an ad network\noptimized for reaching designers and developers. We understand ads can be annoying and we hope that\nour users understand the trade-off we've made by choosing to place ads on our website.\n\n## Partners\n\nFinally, we are partnering with commercial entities and other projects that use Doctrine to cross\npromote each other. Through our partner network we hope to introduce our users to vetted services\nand offerings from which they can benefit. Thanks to our [Partners](/partners.html) for supporting\nDoctrine.\n", - "date": "2019-05-21 00:00:00" + "url": "/2009/10/07/doctrine-2-documentation.html", + "slug": "doctrine-2-documentation", + "title": "Doctrine 2 Documentation", + "authorName": "jwage", + "authorEmail": "", + "contents": "Did you know that Doctrine 2 is already very well documented? I've\nnoticed recently that some people seem to think we don't have any\ndocumentation for it, and that upgrading will not be possible for many\nmonths to come.\n\nWe have an almost complete manual on Doctrine 2 which is the same\nconcept of \"Guide to Doctrine for PHP\" for Doctrine 1. It covers all the\ncore concepts of Doctrine 2 as well as information on how to get\nstarted, code examples, best practices, etc.\n\nThe Guide to Doctrine for PHP starts off with the following chapters...\n\n- [Introduction](https://www.doctrine-project.org/projects/doctrine-orm/en/current/tutorials/getting-started.html)\n- [Architecture](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/architecture.html)\n- [Configuration](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/configuration.html)\n- [Basic\n Mapping](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/basic-mapping.html)\n- [...and\n more](https://www.doctrine-project.org/projects/doctrine-orm/en/current/)\n\nThe following chapters have been completed and updated recently...\n\n- [Events](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/events.html)\n- [Tools](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/tools.html)\n\nWe also have a cookbook with a few articles already too...\n\n- [Implementing ArrayAccess for domain\n objects](https://www.doctrine-project.org/projects/doctrine-orm/en/current/cookbook/implementing-arrayaccess-for-domain-objects.html)\n- [Implementing the NOTIFY changetracking\n policy](https://www.doctrine-project.org/projects/doctrine-orm/en/current/cookbook/implementing-the-notify-changetracking-policy.html)\n\nWe hope this helps you a little bit with getting started using Doctrine\n2 and that you enjoy it! :)\n", + "date": "2009-10-07 00:00:00" }, { - "url": "/2008/10/26/symfony-doctrine-schema-manager.html", - "slug": "symfony-doctrine-schema-manager", - "title": "symfony Doctrine Schema Manager", + "url": "/2008/09/01/doctrine-1-0-released.html", + "slug": "doctrine-1-0-released", + "title": "Doctrine 1.0 Released", "authorName": "jwage", "authorEmail": "", - "contents": "As you all probably know, Doctrine has been tightly integrated with [a\nfew](http://trac.doctrine-project.org/wiki/integrate) different PHP\nframeworks. Since symfony was my choice of framework a few years back, I\nhave dedicated a lot of time towards working on the integration between\nthe two.\n\nSomething I've always thought would be fun to build and has been one of\nthe most requested items by users is a nice web based interface for\nmanaging your schema and generate your models from it. With the [new\nform\nframework](https://symfony.com/blog/spice-up-your-forms-with-some-nice-widgets-and-validators)\nas of [symfony\n1.1](https://symfony.com/blog/the-wait-is-over-symfony-1-1-released)\n, you can build rich forms with a nice OOP interface. This made it\nextremely easy to make the schema manager feature of the\n[sfDoctrineManagerPlugin](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin).\nIt was as simple as automatically generating a set of forms from the\nschema information data structure inside of Doctrine.\n\n[![sfDoctrineManagerPlugin](http://www.symfony-project.org/uploads/plugins/5e25c2c7775a8ed169e2d9a6de8e2d1d98ffd110.png)](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin)\n\nThis symfony plugin allows you to manage all your schema information\nfrom a nice web based interface. You can create new schemas or load your\nexisting schemas to edit. More information about it as well as screen\nshots can be found\n[here](http://www.symfony-project.com/plugins/sfDoctrineManagerPlugin).\n", - "date": "2008-10-26 00:00:00" + "contents": "\n\nToday I am extremely happy to introduce the first stable version of\nDoctrine, 1.0.0. If you've been around for a while, then you know this\nis a long time coming. We've been hard at work on Doctrine for nearly 3\nyears and it is finally time to release a version we will support with\nbug fix releases every month. This 1.0 release will be maintained until\nMarch 1st 2010. Now we have 1.0, what is next? Below are some highlights\nof what to expect in the future of Doctrine.\n\n
\n\nWhat are you waiting for? Download Doctrine 1.0 now and give it a try.\nCheck out the Cookbook and Manual to help you get started. The My First\nProject Tutorial is good for just getting started and getting your feet\nwet.\n\n
\n\n\n", + "date": "2008-09-01 00:00:00" }, { - "url": "/2011/01/30/doctrine-maintenance-jan2011.html", - "slug": "doctrine-maintenance-jan2011", - "title": "Maintenance Releases 2.0.1 of Common, DBAL and ORM", + "url": "/2010/03/29/doctrine2-custom-dql-udfs.html", + "slug": "doctrine2-custom-dql-udfs", + "title": "Extending DQL in Doctrine 2: User-Defined Functions", "authorName": "beberlei", "authorEmail": "", - "contents": "We released the first maintenance versions of Common, DBAL and ORM\ntoday. See the changelogs for more information:\n\n- [ORM, 26 Bugs\n fixed](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10114)\n- [DBAL, 1 Bug\n fixed](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10115)\n- Common, no known bugs\n\nWe also optimized the build process, so that the Version Classes in the\nGit Tags do not contain the \"-DEV\" suffix anymore.\n\nYou can get the code from [Git](https://github.com/doctrine) , [our PEAR\nchannel](http://pear.doctrine-project.org) or from the [download\nsection](https://www.doctrine-project.org/projects) of the website.\n", - "date": "2011-01-30 00:00:00" + "contents": "By default DQL supports a limited subset of all the vendor-specific SQL\nfunctions common between all the vendors. However in many cases once you\nhave decided on a specific database vendor, you will never change it\nduring the life of your project. This decision for a specific vendor\npotentially allows you to make use of powerful SQL features that are\nunique to the vendor.\n\n> **Note**\n>\n> It is worth to mention that Doctrine 2 also allows you to handwrite\n> your SQL instead of extending the DQL parser, which is sort of an\n> advanced extension point. You can map arbitrary SQL to your objects\n> and gain access to vendor specific functionalities using the\n> `EntityManager#createNativeQuery()` API.\n\nThe DQL Parser has hooks to register functions that can then be used in\nyour DQL queries and transformed into SQL, allowing to extend Doctrines\nQuery capabilities to the vendors strength. This post explains the\nUsed-Defined Functions API (UDF) of the Dql Parser and shows some\nexamples to give you some hints how you would extend DQL.\n\nThere are three types of functions in DQL, those that return a numerical\nvalue, those that return a string and those that return a Date. Your\ncustom method has to be registered as either one of those. The return\ntype information is used by the DQL parser to check possible syntax\nerrors during the parsing process, for example using a string function\nreturn value in a math expression.\n\nRegistering your own DQL functions\n==================================\n\nYou can register your functions adding them to the ORM configuration:\n\n~~~~ {.sourceCode .php}\naddCustomStringFunction($name, $class);\n$config->addCustomNumericFunction($name, $class);\n$config->addCustomDatetimeFunction($name, $class);\n\n$em = EntityManager::create($dbParams, $config);\n~~~~\n\nThe `$name` is the name the function will be referred to in the DQL\nquery. `$class` is a string of a class-name which has to extend\n`Doctrine\\ORM\\Query\\Node\\FunctionNode`. This is a class that offers all\nthe necessary API and methods to implement a UDF.\n\nIn this post we will implement some MySql specific Date calculation\nmethods, which are quite handy in my opinion:\n\nDate Diff\n=========\n\n[Mysql's DateDiff\nfunction](http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff)\ntakes two dates as argument and calculates the difference in days with\n`date1-date2`.\n\nThe DQL parser is a top-down recursive descent parser to generate the\nAbstract-Syntax Tree (AST) and uses a TreeWalker approach to generate\nthe appropriate SQL from the AST. This makes reading the\nParser/TreeWalker code managable in a finite amount of time.\n\nThe `FunctionNode` class I referred to earlier requires you to implement\ntwo methods, one for the parsing process (obviously) called `parse` and\none for the TreeWalker process called `getSql()`. I show you the code\nfor the DateDiff method and discuss it step by step:\n\n~~~~ {.sourceCode .php}\nmatch(Lexer::T_IDENTIFIER); // (2)\n $parser->match(Lexer::T_OPEN_PARENTHESIS); // (3)\n $this->firstDateExpression = $parser->ArithmeticPrimary(); // (4)\n $parser->match(Lexer::T_COMMA); // (5)\n $this->secondDateExpression = $parser->ArithmeticPrimary(); // (6)\n $parser->match(Lexer::T_CLOSE_PARENTHESIS); // (3)\n }\n\n public function getSql(\\Doctrine\\ORM\\Query\\SqlWalker $sqlWalker)\n {\n return 'DATEDIFF(' .\n $this->firstDateExpression->dispatch($sqlWalker) . ', ' .\n $this->secondDateExpression->dispatch($sqlWalker) .\n ')'; // (7)\n }\n}\n~~~~\n\nThe Parsing process of the DATEDIFF function is going to find two\nexpressions the date1 and the date2 values, whose AST Node\nrepresentations will be saved in the variables of the DateDiff\nFunctionNode instance at (1).\n\nThe parse() method has to cut the function call \"DATEDIFF\" and its\nargument into pieces. Since the parser detects the function using a\nlookahead the T\\_IDENTIFIER of the function name has to be taken from\nthe stack (2), followed by a detection of the arguments in (4)-(6). The\nopening and closing parenthesis have to be detected also. This happens\nduring the Parsing process and leads to the generation of a DateDiff\nFunctionNode somewhere in the AST of the dql statement.\n\nThe `ArithmeticPrimary` method call is the most common denominator of\nvalid EBNF tokens taken from the [DQL EBNF\ngrammer](https://www.doctrine-project.org/documentation/manual/2_0/en/dql-doctrine-query-language#ebnf)\nthat matches our requirements for valid input into the DateDiff Dql\nfunction. Picking the right tokens for your methods is a tricky\nbusiness, but the EBNF grammer is pretty helpful finding it, as is\nlooking at the Parser source code.\n\nNow in the TreeWalker process we have to pick up this node and generate\nSQL from it, which apprently is quite easy looking at the code in (7).\nSince we don't know which type of AST Node the first and second Date\nexpression are we are just dispatching them back to the SQL Walker to\ngenerate SQL from and then wrap our DATEDIFF function call around this\noutput.\n\nNow registering this DateDiff FunctionNode with the ORM using:\n\n~~~~ {.sourceCode .php}\naddCustomStringFunction('DATEDIFF', 'DoctrineExtensions\\Query\\MySql\\DateDiff');\n~~~~\n\nWe can do fancy stuff like:\n\n [sql]\n SELECT p FROM DoctrineExtensions\\Query\\BlogPost p WHERE DATEDIFF(CURRENT_TIME(), p.created) < 7\n\nDate Add\n========\n\nOften useful it the ability to do some simple date calculations in your\nDQL query using [MySql's DATE\\_ADD\nfunction](http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add).\n\nI'll skip the bla and show the code for this function:\n\n~~~~ {.sourceCode .php}\nmatch(Lexer::T_IDENTIFIER);\n $parser->match(Lexer::T_OPEN_PARENTHESIS);\n\n $this->firstDateExpression = $parser->ArithmeticPrimary();\n\n $parser->match(Lexer::T_COMMA);\n $parser->match(Lexer::T_IDENTIFIER);\n\n $this->intervalExpression = $parser->ArithmeticPrimary();\n\n $parser->match(Lexer::T_IDENTIFIER);\n\n /* @var $lexer Lexer */\n $lexer = $parser->getLexer();\n $this->unit = $lexer->token['value'];\n\n $parser->match(Lexer::T_CLOSE_PARENTHESIS);\n }\n\n public function getSql(\\Doctrine\\ORM\\Query\\SqlWalker $sqlWalker)\n {\n return 'DATE_ADD(' .\n $this->firstDateExpression->dispatch($sqlWalker) . ', INTERVAL ' .\n $this->intervalExpression->dispatch($sqlWalker) . ' ' . $this->unit .\n ')';\n }\n}\n~~~~\n\nThe only difference compared to the DATEDIFF here is, we additionally\nneed the `Lexer` to access the value of the `T_IDENTIFIER` token for the\nDate Interval unit, for example the MONTH in:\n\n [sql]\n SELECT p FROM DoctrineExtensions\\Query\\BlogPost p WHERE DATE_ADD(CURRENT_TIME(), INTERVAL 4 MONTH) > p.created\n\nThe above method now only supports the specification using `INTERVAL`,\nto also allow a real date in DATE\\_ADD we need to add some decision\nlogic to the parsing process (makes up for a nice excercise).\n\nNow as you see, the Parsing process doesn't catch all the possible SQL\nerrors, here we don't match for all the valid inputs for the interval\nunit. However where necessary we rely on the database vendors SQL parser\nto show us further errors in the parsing process, for example if the\nUnit would not be one of the supported values by MySql.\n\nConclusion\n==========\n\nNow that you all know how you can implement vendor specific SQL\nfunctionalities in DQL, we would be excited to see user extensions that\nadd vendor specific function packages, for example more math functions,\nXML + GIS Support, Hashing functions and so on.\n\nFor 2.0 we will come with the current set of functions, however for a\nfuture version we will re-evaluate if we can abstract even more vendor\nsql functions and extend the DQL languages scope.\n\nCode for this Extension to DQL and other Doctrine Extensions can be\nfound [in my Github DoctrineExtensions\nrepository](https://github.com/beberlei/DoctrineExtensions).\n", + "date": "2010-03-29 00:00:00" }, { - "url": "/2010/02/24/doctrine2-versionable.html", - "slug": "doctrine2-versionable", - "title": "A re-usable Versionable Behavior for Doctrine 2", - "authorName": "beberlei", + "url": "/2008/05/03/website-upgraded-to-symfony-1-1-and-doctrine-0-11.html", + "slug": "website-upgraded-to-symfony-1-1-and-doctrine-0-11", + "title": "Website upgraded to symfony 1.1 and Doctrine 0.11", + "authorName": "jwage", "authorEmail": "", - "contents": "**NOTE** This blog entry relates to an outdated Doctrine 2 Alpha\n: version. Please see the documentation for the most up to date\n behavior. A test-implementation for this behavior is on\n github.com/beberlei/DoctrineExtensions\n\nMy previous post on behaviors in Doctrine 2 generated quite some\ndiscussion about the difference on behaviours that are re-usable across\nmodels and the trivial specific implementations I have shown.\n\nIn this post I will show a re-usable versionable (audit-log) behavior.\nFor this we will need the following ingredients:\n\n- An interface `DoctrineExtensions\\Versionable\\Versionable`\n- A class `DoctrineExtensions\\Versionable\\VersionManager`\n- An event listener `DoctrineExtensions\\Versionable\\VersionListener`\n- A generic entity `DoctrineExtensions\\Versionable\\ResourceVersion`\n\n > **NOTE** The Event API is currently in the central focus of our\n > efforts so the API shown here may change before the first Beta\n > release.\n\nThe workflow is as follows, each Entity that is supposed to be\nversionable has to implement the interface `Versionable` which looks\nlike this:\n\n~~~~ {.sourceCode .php}\nresourceName = get_class($resource);\n $this->resourceId = $resource->getResourceId();\n $this->versionedData = $resource->getVersionedData();\n $this->version = $resource->getCurrentVersion();\n $this->snapshotDate = new \\DateTime(\"now\");\n }\n\n // getters\n}\n~~~~\n\nNow we need to solve the problem of generating the `ResourceVersion`\nwhenever an `Versionable` entity is persisted or updated. This can be\ndone by using the [Doctrine EventManager\nAPI](https://www.doctrine-project.org/projects/doctrine-orm/en/current/reference/events.html).\nWe will implement the `EventSubscriber` interface and hook into the\n\"onFlush\" event.\n\n~~~~ {.sourceCode .php}\ngetEntityManager();\n $uow = $em->getUnitOfWork();\n\n foreach ($uow->getScheduledEntityInsertions() AS $entity) {\n if ($entity instanceof Versionable) {\n $this->_makeSnapshot($entity);\n }\n }\n\n foreach ($uow->getScheduledEntityUpdates() AS $entity) {\n if ($entity instanceof Versionable) {\n $this->_makeSnapshot($entity);\n }\n }\n }\n\n private function _makeSnapshot($entity)\n {\n $resourceVersion = new ResourceVersion($entity);\n $class = $this->_em->getClassMetadata(get_class($resourceVersion));\n\n $this->_em->persist( $resourceVersion );\n $this->_em->getUnitOfWork()->computeChangeSet($class, $resourceVersion);\n }\n}\n~~~~\n\nHow do we hook this `VersionListener` into the EntityManager? We will\nwrap the VersionManager around it that handles registration and offers\nsome convenience methods to retrieve the versions of a resource.\n\n~~~~ {.sourceCode .php}\n_em = $em;\n $this->_em->getEventManager()->addEventSubscriber(\n new VersionListener()\n );\n }\n\n public function getVersions(Versionable $resource)\n {\n $query = $this->_em->createQuery(\n \"SELECT v FROM DoctrineExtensions\\Versionable\\ResourceVersion v INDEX BY v.version \".\n \"WHERE v.resourceName = ?1 AND v.resourceId = ?2 ORDER BY v.version DESC\");\n $query->setParameter(1, get_class($resource));\n $query->setParameter(2, $resource->getResourceId());\n\n return $query->getResult();\n }\n}\n~~~~\n\nNow using this to retrieve all the versions of a given entity that is\nversionable you would go and:\n\n~~~~ {.sourceCode .php}\ngetVersions($blogPost);\n\necho \"Old Title: \".$versions[$oldVersionNum]->getVersionedData('title');\n\n// Create a new version\n$blogPost->setTitle(\"My very new title\");\n$em->flush();\n~~~~\n\nThis is a first example of how to use the powerful Doctrine 2 Event API.\nIt is certainly not easy to use, as you need to understand the inner\nworkings of the UnitOfWork and the different steps it is in during the\nflush process. However you can generate huge benefits in reusability.\n\nThe versionable behaviour could be extended by the following features:\n\n- Create a new interface `Revertable` that extends `Versionable` and\n add a method `revert(Revertable $resource, $toVersion)` to the\n `VersionManager` that handles the retrieval, invoking of revert and\n such.\n- Create a new interface Diffable with a method diff(\\$aVersion,\n \\$bVersion) and new method diff(Diffable \\$resource, \\$aId, \\$bId)\n to the VersionManager that handles the delegation of a difference\n computation between two versions to the Diffable implementor.\n\nAnother approach would be not to save the complete state of an entity\nduring the flush operation, but only the fields that changed. This is\ngenerally called an *AuditLog*. We could add an `Auditable` interface\nmuch in the same manner than the `Versionable` and retrieve the\nChangeSets of each entity during flush using the following event\nlistener:\n\n~~~~ {.sourceCode .php}\ngetEntityManager();\n $uow = $em->getUnitOfWork();\n\n $changeDate = new DateTime(\"now\");\n $class = $em->getClassMetadata('DoctrineExtensions\\Auditable\\AuditEntry');\n\n foreach ($uow->getScheduledEntityUpdates() AS $entity) {\n if ($entity instanceof Auditable) {\n $changeSet = $uow->getEntityChangeSet($entity);\n\n foreach ($changeSet AS $field => $vals) {\n list($oldValue, $newValue) = $vals;\n $audit = new AuditEntry(\n $entity->getResourceName(),\n $entity->getId(),\n $oldValue,\n $newValue,\n $changeDate\n );\n\n $em->persist($audit);\n $em->getUnitOfWork()\n ->computeChangeSet($class, $audit);\n }\n }\n }\n }\n}\n~~~~\n\nThis approach can also be re-used or combined with several similiar\nbehaviours, like Taggable, Blamable, Commentable.\n", - "date": "2010-02-24 00:00:00" + "contents": "\n\nToday I have upgraded the Doctrine website to symfony 1.1 and Doctrine\n0.11. The integration between the symfony framework and Doctrine with\nsfDoctrinePlugin has become pretty complete in the last few days. It now\nhas all the same functionality as the bundled sfPropelPlugin with\nsymfony 1.1 plus dozens more features a long with the Doctrine DBAL and\nORM. The main features introduced to the symfony framework are\nmigrations, DQL, behaviors, inheritance and a sprinkle of additional\nadmin generator features. I have also completely re-ported\nsfGuardDoctrinePlugin from sfGuardPlugin so it is in sync with it and\nhas exactly the same features, nothing more. The removed functionality\nwill be moved to separate plugins that work with sfGuardDoctrinePlugin.\n\n
\n\nThe source of the Doctrine website can be gotten from svn here\n[http://www.phpdoctrine.org/svnweb](http://www.phpdoctrine.org/svnweb)\n\n
\n\n\n", + "date": "2008-05-03 00:00:00" }, { - "url": "/2010/12/04/doctrine2-rc1.html", - "slug": "doctrine2-rc1", - "title": "Doctrine ORM RC1 released", - "authorName": "beberlei", + "url": "/2015/03/22/migrations-1-0-0-alpha-3.html", + "slug": "migrations-1-0-0-alpha-3", + "title": "Doctrine Migrations 1.0.0-alpha3 Pre-Release", + "authorName": "Michael Simonson", "authorEmail": "", - "contents": "We are pleased to announce the immediate availability of the first\nRelease Candidate of the Doctrine ORM. Over 2 years of dedicated\ndevelopment will soon lead to the final release. If no non-trival bugs\nare reported in the period of the next 1-2 weeks this release candidate\nwill serve as basis for the final release.\n\nFor this release candidate over 70 tickets were closed. See the\nchangelog for a detailed overview:\n\n- [Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10091)\n\nWe want to thank everybody for their contributions and help.\n", - "date": "2010-12-04 00:00:00" + "contents": "We are happy to announce the immediate availability Doctrine Migrations\n`1.0.0-alpha3`.\n\nThis is a pre-release meant to allow users and contributors to try out\nthe new upcoming features of the migrations.\n\nWe encourage all of our users to help us by trying out this alpha\nrelease. Please report any possible problems or incompatibilities that\nmay have been introduced during development.\n\nWhat is new in 1.0.x?\n=====================\n\nYou can find the current state of the 1.0.0 changes overview in [the\nupgrade\nnotes](https://github.com/doctrine/migrations/blob/master/UPGRADE-1.0.MD).\n\nPlease report any issues you may have with the update on\n[Github](https://github.com/doctrine/migrations/issues).\n", + "date": "2015-03-22 00:00:00" }, { - "url": "/2010/07/20/mixing-types-of-documents.html", - "slug": "mixing-types-of-documents", - "title": "MongoDB ODM: Mixing Types of Documents", + "url": "/2010/06/09/doctrine-mongodb-odm-1-0-0alpha1-released.html", + "slug": "doctrine-mongodb-odm-1-0-0alpha1-released", + "title": "Doctrine MongoDB ODM 1.0.0ALPHA1 Released", "authorName": "jwage", "authorEmail": "", - "contents": "One major advantage to using something like MongoDB is the fact that it\nis schema-less. We can store multiple types of documents in a single\ncollection and we are not limited to a single type of document in\nembedded and referenced documents. This article shows how you can easily\nmix types of documents in collections, embedded and referenced\ndocuments.\n\nMixing Types in Collections\n===========================\n\nIf you don't want to use `SINGLE_COLLECTION` inheritance you can easily\nstore different documents in the same collection by using a\ndiscriminator field. First define an `Article` document that maps to\n`my_documents`:\n\n~~~~ {.sourceCode .php}\nsetTitle('Sample Article');\n// ...\n\n$album = new Album();\n$album->setName('My Album');\n\n$dm->persist($article);\n$dm->persist($album);\n~~~~\n\nFinally, if you retrieve the documents they'll all be retrieved from\n`my_documents` but you will get back the proper PHP classes that created\nthem:\n\n~~~~ {.sourceCode .php}\nfind('Article');\n$albums = $dm->find('Album');\n~~~~\n\nYou can retrieve more then just one document type by specifying an\narray:\n\n~~~~ {.sourceCode .php}\ncreateQuery(array('Article', 'Album'))\n ->execute();\n~~~~\n\nThe returned documents will contain instances of articles and albums!\n\nMixing Types in Embedded Documents\n==================================\n\nYou can store multiple types of documents in embedded documents by\nsimply omitting the `targetDocument` option. First create a `User`\ndocument and embed multiple task documents:\n\n~~~~ {.sourceCode .php}\nfindOne('User', array(...));\n\n$task = new DownloadTask();\n// ...\n\n$user->addTask($task);\n\n$task = new UploadTask();\n// ...\n\n$user->addTask($task);\n\n$dm->flush();\n~~~~\n\nMixing Types in Referenced Documents\n====================================\n\nMixing types in referenced documents works just the same as embedded by\nomitting the `targetDocument` option. In this example a user can add\nreferences to all his favorite albums, songs and books. First define a\n`User` document with a many references property for storing the users\nfavorites:\n\n~~~~ {.sourceCode .php}\naddFavorite($album);\n$user->addFavorite($song);\n$user->addFavorite($book);\n\n$dm->flush();\n~~~~\n\nWhen you retrieve the user and access the `$favorites` the documents\nwill be grouped by type and loaded with one or more `$in` queries:\n\n~~~~ {.sourceCode .php}\nfindOne('User', array(...));\n$favorites = $user->getFavorites();\n\n// Lazily loads references\n// Contains Album, Song and Book instances\nforeach ($favorites as $favorite) {\n // ...\n}\n~~~~\n\nThat is it! It is easy to take advantage of the schema-less features of\nMongoDB with the Doctrine Object Document Mapper (ODM)!\n", - "date": "2010-07-20 00:00:00" + "contents": "Today I am very happy to announce the release of the first alpha version\nof the Doctrine [MongoDB](https://www.mongodb.com/) Object Document\nMapper. This is exciting as it is the beginning of a whole new chapter\nin the life of the Doctrine Project. We hope to continue adding packages\nto allow you to transparently persist your domain objects to a variety\nof different database engines!\n\nFeatures\n========\n\nBelow you will find a list of some of the features provided by the\nDoctrine MongoDB Object Document Mapper:\n\n- Transparent persistence.\n- Map one or many\n [embedded](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/embedded-mapping/en)\n documents.\n- Map one or many\n [referenced](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/reference-mapping/en)\n documents.\n- Create references between documents in different databases.\n- Map documents with\n [Annotations](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/annotations-reference/en)\n ,\n [XML](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/xml-mapping/en#xml-mapping)\n ,\n [YAML](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/yml-mapping/en#yml-mapping)\n or plain old PHP code.\n- Documents can be stored on the\n [MongoGridFS](https://secure.php.net/MongoGridFS).\n- Collection per class(concrete) and single collection\n [inheritance](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/inheritance-mapping/en)\n supported.\n- Map your Doctrine 2 ORM Entities to the ODM and use mixed data\n stores.\n- Inserts are performed using\n [MongoCollection::batchInsert()](http://us.php.net/manual/en/mongocollection.batchinsert.php)\n- Updates are performed using the atomic operators \\$set, \\$pullAll,\n \\$pushAll and \\$increment instead of saving the entire document.\n- [Migrate](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/migrating-schemas/en)\n your schema as your domain model evolves and changes.\n- [Fluent Object Oriented\n Interface](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/query-api/en)\n for building and executing queries.\n- [Map\n Reduce](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/map-reduce/en)\n integration.\n\nYou can continue reading the\n[Introduction](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/introduction/en)\nchapter in the reference documentation to get a grasp of what exactly\nthe Doctrine MongoDB Object Document Mapper does by looking at some\nexamples!\n\nDocumentation\n=============\n\nWant documentation? You got it! Check out the links below to get started\nlearning about the Doctrine MongoDB Object Document Mapper:\n\n- [Reference\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/en)\n- [Getting Started Cookbook\n Article](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/cookbook/getting-started/en)\n- [API\n Documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/api)\n\nWe'll be adding more\n[Cookbook](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/cookbook)\narticles in the coming weeks so check back for more documentation!\n\nDownload\n========\n\nYou can see all the download information for the Doctrine MongoDB ODM on\nthe projects\n[download](https://www.doctrine-project.org/projects/mongodb_odm/download)\npage. You have several ways to get the code which are described below as\nwell:\n\nCheckout from Git\n-----------------\n\n $ git clone git://github.com/doctrine/mongodb-odm.git mongodb_odm\n $ cd mongodb_odm\n $ git checkout 1.0.0ALPHA1\n\nDownload PEAR Package\n---------------------\n\nYou can manually download the PEAR package\n[here](https://www.doctrine-project.org/downloads/DoctrineMongoDBODM-1.0.0ALPHA1.tgz).\nIf you want you can manually unarchive the code or you can\n`pear install` the downloaded package:\n\n $ pear install /path/to/downloads/DoctrineMongoDBODM-1.0.0ALPHA1.tgz\n\nInstall from PEAR\n-----------------\n\nYou can also directly install using our [PEAR\nServer](http://pear.doctrine-project.org):\n\n $ pear install pear.doctrine-project.org/DoctrineMongoDBODM-1.0.0ALPHA1\n\nReporting Issues\n================\n\nIf you encounter any problems with the Doctrine MongoDB Object Document\nMapper you can report new issues to the\n[Jira](https://www.doctrine-project.org/jira/browse/MODM) project. For\nmore information about contributing to Doctrine you can checkout the\ndocumentation for our [Contributor\nWorkflow](https://www.doctrine-project.org/contribute).\n", + "date": "2010-06-09 00:00:00" }, { - "url": "/2015/11/02/cache-1-4-4_and-1-5-1.html", - "slug": "cache-1-4-4_and-1-5-1", - "title": "Cache 1.4.4 and 1.5.1 Released", + "url": "/2021/04/19/dbal-2.13.1-3.1.0.html", + "slug": "dbal-2.13.1-3.1.0", + "title": "New Release: Doctrine DBAL 2.13.1 and 3.1.0 with important Forward Compatibility fix", + "authorName": "Benjamin Eberlei", + "authorEmail": "kontakt@beberlei.de", + "contents": "Last month [we released DBAL\n2.13.0](https://www.doctrine-project.org/2021/03/29/dbal-2.13.html) as an\nimportant push for the ecosystem towards DBAL 3 with an extensive deprecation\nand forward compatibility layer.\n\nWe made a few mistakes, given that the forward compatibility layer is quite complex.\nAs such we have now released Doctrine DBAL 2.13.1 and 3.1.0 with two new APIs\nthat improve the forward compatiblity.\n\nThe problem lies in `Statement::execute()`: 2.13.0 would return a `bool` and\n3.0.0 would return a `Result` from this method. This kind of API change cannot\nbe handled with a forward compatibility.\n\nAs such we introduced two new APIs on `Statement` that replace `execute()`.\nWhen the old code was:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$statement->execute();\n\n$rows = $statement->fetchAll();\n```\n\nThen the new code is now:\n\n```php\n$statement = $connection->prepare('SELECT * FROM tbl WHERE col = ?');\n$result = $statement->executeQuery();\n\n$rows = $result->fetchAllAssociative();\n```\n\nThe DBAL 2.13 forward compatiblity layer supports both versions of all code and\nreturns a Statement/Result hybrid that has all the APIs that the DBAL Statement\nhad up until version 2.12. This way you can move at your own pace from the old\nto the new API in your code.\n\nThank you again to [mdumoulin](https://github.com/mdumoulin) for the work on\nimproving the forward compatiblity and to [Sergei Morozov](https://twitter.com/srgmrzv)\nfor the thorough reviews and comments.\n\nAgain I want to highlight the Runtime Deprecations library that we introduced\nto support this migration. You can integrate this with your log stack during\ndevelopment and testing:\n\n```php\nuse Doctrine\\Deprecations\\Deprecation;\nuse Monolog\\Logger;\nuse Monolog\\Handler\\StreamHandler;\n\n$log = new Logger('doctrine');\n$log->pushHandler(new StreamHandler('deprecations.log', Logger::INFO));\n\nDeprecation::enableWithPsrLogger($log);\n```\n\nOr alternatively using PHP's global error handler:\n\n```php\nDeprecation::enableWithTriggerError();\n```\n\nSee the [2.13 blog\npost](https://www.doctrine-project.org/2021/03/29/dbal-2.13.html) for more\ninformation about the migration to DBAL 3 and strategy recommendations.\n", + "date": "2021-04-19 00:00:00" + }, + { + "url": "/2012/01/22/dbal-orm-22rc1.html", + "slug": "dbal-orm-22rc1", + "title": "DBAL and ORM 2.2 Release candidates", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "Again with a slight delay we finalized the DBAL and ORM release\ncandidates for the 2.2 branch. There have been some late changes that\nmade the delay necessary:\n\n- DBAL Schema supported was heavily refactored to include the concept\n of \"namespaces\". This abstracts multi-database useage for MySQL and\n Schema support for PostgreSQL.\n- A Paginator was put into the DoctrineORMToolsPagination namespace.\n Its the combination of the original DoctrineExtensions Paginator\n with extensions done in the KnpLabs components and the Pagerfanta\n library.\n\nAs usual you can grab the code from:\n\n- [Packagist](https://packagist.org/packages/doctrine/)\n- [PEAR](http://pear.doctrine-project.org)\n- [Downloads](https://www.doctrine-project.org/projects)\n- [Github](https://github.com/doctrine)\n\nPlease test this code with your applications. If no bugs or\nbackwards-compatible breaks are reported in the next days we will\nrelease the final version on friday.\n", + "date": "2012-01-22 00:00:00" + }, + { + "url": "/2015/10/28/cache-1-4-3_and-1-5-0.html", + "slug": "cache-1-4-3_and-1-5-0", + "title": "Cache 1.4.3 and 1.5.0 Released", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.4.4](https://github.com/doctrine/cache/releases/tag/v1.4.4) and\n[1.5.1](https://github.com/doctrine/cache/releases/tag/v1.5.1).\n\nCache 1.4.4\n===========\n\nThis release fixes the version number reported in\n[Doctrine/Common/Cache/Version::VERSION](https://github.com/doctrine/cache/blob/v1.5.1/lib/Doctrine/Common/Cache/Version.php)\n\nAdditionally, a flaw in `CacheProvider#fetchMultiple()` was fixed:\n`null` and false-y values being fetched were considered cache misses,\nbut are now correctly included in the results\n([\\#104](https://github.com/doctrine/cache/pull/104)).\n\nYou can find the complete changelog for this release in the [v1.4.4\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.4.4).\n\nCache 1.5.1\n===========\n\nThis release includes all the fixes mentioned in the above `1.4.4`\npatch.\n\nYou can find the complete changelog for this release in the [v1.5.1\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.5.1).\n\nInstallation\n============\n\nYou can install the Cache component using Composer either of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.4.4\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.5.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-11-02 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.4.3](https://github.com/doctrine/cache/releases/tag/v1.4.3) and\n[1.5.0](https://github.com/doctrine/cache/releases/tag/v1.5.0).\n\nCache 1.4.3\n===========\n\nThis release fixes some minor issues that prevented various cache\nadapters from correctly reporting success or failure in case of cache\nkey deletion ([\\#95](https://github.com/doctrine/cache/pull/95)).\n\nAnother issue being fixed is related to `CacheProvider#fetchMultiple()`,\nwhich was failing to operate when an empty list was given to it\n([\\#90](https://github.com/doctrine/cache/pull/90)).\n\nAlso, the `CacheProvider` does not store version information internally\nunless `CacheProvider#deleteAll()` was called at least once\n([\\#91](https://github.com/doctrine/cache/pull/91)).\n\nYou can find the complete changelog for this release in the [v1.4.3\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.4.3).\n\nCache 1.5.0\n===========\n\nThis release includes all the changes released with version 1.4.3, as\nwell as further bug fixes and improvements that will require you to\nclean your caches (if file-based) during the upgrade.\n\nPHP7 support is now guaranteed\n([\\#92](https://github.com/doctrine/cache/pull/92)).\n\nFile based caches now use a much lower number of directories\n([\\#94](https://github.com/doctrine/cache/pull/94)).\n\nProper support for wincache multi-get was added\n([\\#97](https://github.com/doctrine/cache/pull/97)).\n\nPredis cache adapter now relies on the `Predis\\ClientInterface`\n([\\#87](https://github.com/doctrine/cache/pull/87)).\n\nYou can find the complete changelog for this release in the [v1.5.0\nrelease notes](https://github.com/doctrine/cache/releases/tag/v1.5.0).\n\nCredits\n=======\n\nWe would like to thank all contributors that patiently supported us in\nfixing the file-based cache directory structure long-standing issues,\nand especially:\n\n> - Tobias [Tobion](https://github.com/Tobion) Schultze\n> - Krzysztof [Crozin](https://github.com/Crozin) \u0141abu\u015b\n> - Steve [kamermans](https://github.com/kamermans) Kamerman\n\nInstallation\n============\n\nYou can install the Cache component using Composer either of the\nfollowing `composer.json` definitions:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.4.1\"\n }\n}\n```\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"~1.5.0\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2015-10-28 00:00:00" }, { - "url": "/2016/06/09/odm-1-1-0-and-1-0-6.html", - "slug": "odm-1-1-0-and-1-0-6", - "title": "Doctrine MongoDB ODM 1.1.0 and 1.0.6 Released", + "url": "/2015/12/25/dbal-2-5-3.html", + "slug": "dbal-2-5-3", + "title": "Doctrine DBAL 2.5.3 Released", + "authorName": "Marco Pivetta", + "authorEmail": "ocramius@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n[2.5.3](https://github.com/doctrine/dbal/releases/tag/v2.5.3).\n\nThe SQLServer platform support for pagination query modification was\ncompletely rewritten, improving stability and code quality as well as\nease of maintenance.\n[\\#818](https://github.com/doctrine/dbal/issues/818)\n\nDependency constraints on the\n[doctrine/common](https://github.com/doctrine/common) component\nsupported versions were corrected, allowing users to install\n`doctrine/common` `2.6.*` together with the DBAL.\n[\\#2268](https://github.com/doctrine/dbal/issues/2268)\n\nInstallation\n============\n\nYou can install the DBAL component using Composer:\n\n```bash\ncomposer require doctrine/dbal:~2.5.3\n```\n\nPlease report any issues you may have with the update on the [issue\ntracker](https://github.com/doctrine/dbal/issues).\n", + "date": "2015-12-25 00:00:00" + }, + { + "url": "/2016/11/22/doctrine-mongodb-release-1.4.0.html", + "slug": "doctrine-mongodb-release-1.4.0", + "title": "Doctrine MongoDB 1.4.0", "authorName": "Andreas Braun", "authorEmail": "alcaeus@alcaeus.org", - "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM [1.1.0](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.0)\nand [1.0.6](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.6).\n\nWhat is new in 1.1.0?\n=====================\n\nDoctrine MongoDB ODM 1.1.0 comes with the following new features: - ODM\nnow supports sharded collections out of the box - Users may provide\ncustom implementations for 1-n associations - Fetch documents in\nread-only mode - Partial indexes, which were introduced in MongoDB 3.2 -\nPHP 7 support - [and much\nmore](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.1.0)\n\nPHP 7 support\n=============\n\nRunning MongoDB ODM on PHP 7 requires the new MongoDB driver\n(`ext-mongodb`) which is not directly compatible with ODM. To solve\nthis, you can use a polyfill like\n[mongo-php-adapter](https://github.com/alcaeus/mongo-php-adapter), which\nprovides the legacy driver API on top of the new driver. To do so, in\nyour PHP 7 project, add the following Composer directives in addition to\nthe MongoDB ODM requirement:\n\n```json\n{\n \"require\": {\n \"alcaeus/mongo-php-adapter\": \"^1.0\",\n \"ext-mongo\": \"*\"\n }\n}\n```\n\nUpgrading to 1.1.0\n==================\n\nThe new version requires PHP 5.6+; older versions are no longer\nsupported. If you are using an older version, please use Doctrine\nMongoDB ODM 1.0.x or upgrade your PHP version. In addition to these PHP\nversion changes, MongoDB ODM 1.1.0 requires version 1.5 or newer of the\nlegacy MongoDB driver. The new MongoDB driver is supported using\npolyfill (like `mongo-php-adapter` mentioned above).\n\nTo use custom collection classes, you must set a\n\\`persistentCollectionDir\\` in the configuration. This is an optional\nfeature and is not required by default.\n\nSeveral features have been deprecated and will be dropped in the 2.0\nrelease: - All specific type annotations (e.g. \\`@String\\`) have been\ndeprecated. Please use the \\`@Field\\` annotation instead. - The\n\\`Increment\\` type has been deprecated in favor of a storage strategy\ncombined with the \\`Integer\\` and \\`Float\\` type - The \\`simple\\` flag\nfor references has been replaced with \\`storeAs\\`, allowing more\nflexibility.\n\nInstallation\n============\n\nYou can install this version of MongoDB ODM by using Composer and the\nfollowing `composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.1.0\"\n }\n}\n```\n\nMongoDB ODM 1.0.6\n=================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#106-2016-06-09).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.6\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.6).\n\nStability\n=========\n\nAs of today, Doctrine MongoDB ODM `1.1.0` is the stable distribution.\nThere is no release schedule for an upcoming version yet.\n\nDue to the requirement changes introduced with MongoDB ODM `1.1.0` we\nhave decided to provide bug fixes as well as security fixes for MongoDB\nODM `1.0.x` for an additional 6 months. After that, `1.0.x` will no\nlonger be supported.\n", - "date": "2016-06-09 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nAbstraction Layer\n[1.4.0](https://github.com/doctrine/mongodb/releases/tag/1.4.0).\n\nPassing context options to the driver\n=====================================\n\nWith this release it's possible to pass driver options to the connection\nclass, which will then be passed on to the MongoDB driver. For example,\nto pass a stream context with SSL context options, you could use the\nfollowing code snippet:\n\n```php\n$context = stream_context_create([\n 'ssl' => [\n 'allow_self_signed' => false,\n ]\n]);\n$connection = new \\Doctrine\\MongoDB\\Connection(null, [], null, null, ['context' => $context]);\n```\n\nPassing multiple expressions to logical operators\n=================================================\n\nThe `addAnd`, `addNor` and `addOr` methods in the query and aggregation\nbuilders now take multiple expression objects. Instead of having to call\nthe method repeatedly, you may call it once with multiple arguments:\n\n```php\n// Before\n$builder\n ->addAnd($someExpression)\n ->addAnd($otherExpression);\n\n// After\n$builder->addAnd($someExpression, $otherExpression);\n```\n\nDeprecations\n============\n\nThe `update` and `multiple` methods in the query have been deprecated in\nfavor of `updateOne` and `updateMany`. These deprecations help people\nusing ODM prepare for the next version of ODM which will utilize the new\nMongoDB library API.\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb/blob/master/CHANGELOG-1.4.md#140-2016-11-22).\nA full list of issues and pull requests included in this release may be\nfound in the [1.4.0\nmilestone](https://github.com/doctrine/mongodb/issues?q=milestone%3A1.4.0).\n\nPHP version support\n===================\n\nWith this release, we have dropped support for PHP 5.5. Users using PHP\n5.5 or older are encouraged to upgrade to a newer PHP version. If you\nare using PHP 7.0 or 7.1, you can use this library by adding a polyfill\nfor `ext-mongo`, like\n[mongo-php-adapter](https://github.com/alcaeus/mongo-php-adapter).\n\nFuture releases\n===============\n\nThis release is the last planned minor release of the MongoDB\nAbstraction Layer, with only bugfixes being done in maintenance\nreleases. The library will not be rewritten to support the new MongoDB\ndriver. Users are encouraged to use the new [MongoDB\nlibrary](https://github.com/mongodb/mongo-php-library). Doctrine\nMongoDB ODM will be adapted to support the new driver and the MongoDB\nlibrary.\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb\": \"^1.4.0\"\n }\n}\n```\n", + "date": "2016-11-22 00:00:00" }, { - "url": "/2010/03/17/doctrine-performance-revisited.html", - "slug": "doctrine-performance-revisited", - "title": "Doctrine Performance Revisited", + "url": "/2010/03/13/doctrine2-validations.html", + "slug": "doctrine2-validations", + "title": "Validation of Doctrine 2 Entities", "authorName": "beberlei", "authorEmail": "", - "contents": "In our ever-lasting quest to provide a powerful, flexible and yet\nperformant ORM experience we are often confronted with benchmarks and\nhave been talking about performance topics since last year in several\ntalks at many different conferences, and Roman has [talked about his\nopinion on such benchmarks on this\nblog](https://www.doctrine-project.org/2009/11/18/php-benchmarking-mythbusters.html).\n\nRecently Francois Zaninotto, lead developer of the soon to be released\nPropel 1.5 (currently in beta) [wrote a blog\npost](http://propel.posterous.com/how-fast-is-propel-15) comparing\nperformance mainly of the different Propel 1.x versions with and without\ncaching and against a PDO benchmark. The benchmark also contains a test\nfor Doctrine 1.2.\n\nIt is important to note that the PDO test only shows the \"baseline\"\nperformance, that is, it does not even remotely \"do the same thing\" as\nthe others. No object creation, no hydration of objects from result\nrows, no identity management, no change tracking, nothing. So dont get\nthe numbers wrong. If you would want to get at least remotely the same\nresult as the ORMs provide with a raw PDO/SQL \"benchmark\", you would\nneed quite some custom coding and, if you dont want to copy/paste all\nday, introduce some abstraction.\n\nThe following scenarios are compared in the benchmark:\n\n> - Scenario 1: Create a new Model object, set its columns, and save\n> it. Tests Model object speed, and INSERT SQL generation.\n> - Scenario 2: Lookup a record by its primary key. Tests basic query\n> and hydration.\n> - Scenario 3: Lookup a record using a complex query. Tests object\n> query speed.\n> - Scenario 4: Lookup 5 records on a simple criterion. Tests\n> hydration speed.\n> - Scenario 5: Lookup a record and hydrate it together with its\n> related record in another table. Tests join hydration speed.\n\nI reproduced the complete table of results here for comparison since my\nmachine is generating very different overall times than the ones\ngenerated by Francois. Each Scenario is executed several times and the\nsum of execution times is printed. After each run the identity maps are\nwiped so that objects are not reused. All the tests use an SQLite\nIn-Memory database, are run on PHP 5.3 and *of course* use an opcode\ncache (APC).\n\nA first version of the corresponding Doctrine 2 benchmarks was added\ntoday [to the SVN repository by\nRoman](http://code.google.com/p/php-orm-benchmark/source/browse/#svn/trunk/doctrine_2)\nThey can all be run from your machine directly after checkout.\n\nHere are my results:\n\n | Insert | findPk | complex| hydrate| with |\n |--------|--------|--------|--------|--------|\n\n> PDOTestSuite | 132 | 149 | 112 | 107 | 109 |\n\n> Propel14TestSuite | 953 | 436 | 133 | 270 | 280 |\n\n> Propel15aLa14TestSuite | 926 | 428 | 143 | 264 | 282 |\n> : Propel15TestSuite | 923 | 558 | 171 | 356 | 385 |\n>\n> Propel15WithCacheTestSuite | 932 | 463 | 189 | 342 | 327 |\n> : Doctrine12TestSuite | 1673 | 2661 | 449 | 1710 | 1832 |\n>\n> Doctrine12WithCacheTestSuite | 1903 | 1179 | 550 | 957 | 722 |\n> : Doctrine2TestSuite | 165 | 426 | 412 | 1048 | 1042 |\n>\n> > Doctrine2WithCacheTestSuite | 176 | 423 | 148 | 606 | 383 |\n\nThese are the key observations for the Doctrine 2 results.\n\nDoctrine 2 Insert Performance\n=============================\n\nThis is mainly a result of the rather strange test. Its basically a\nmass-insert. All the insert tests seem to use a single database\ntransaction, so its comparable to a mass-insert on a single request. As\nsuch the result is not surprising since we know that Doctrine 2 can\neffectively batch inserts. Mind you that mass-inserts are not really a\nfocus of an ORM and not a realistic scenario in most applications. So\ntake this test with a grain of salt, its a mass-insert test. If you're\nlooking for the ORM with the fastest mass-inserts, you can stop now, you\nfound it.\n\nDoctrine 2 Find By Primary Key Performance\n==========================================\n\nDoctrine 2 Find Entity By Primary Key performance seems to be roughly\nthree times as slow as handcrafted PDO (that doesnt do anything besides\nexecuting the query, mind you...). The good results in this test,\nespecially compared to Doctrine 1, come from the fact that there is not\nmuch abstraction for all kinds of find\\*() operations going on. SQL is\ncreated, executed and the results turned into objects without much\nhoopla.\n\nDoctrine 2 Complex Query Performance\n====================================\n\nThe complex query is a scalar count query. See the Doctrine 2 code for\nthis scenario:\n\n~~~~ {.sourceCode .php}\nem->createQuery(\n 'SELECT count(a.id) AS num FROM Author a WHERE a.id > ?1 OR CONCAT(a.firstName, a.lastName) = ?2'\n)->setParameter(1, $this->authors[array_rand($this->authors)]->id)\n ->setParameter(2, 'John Doe')\n ->getSingleScalarResult();\n~~~~\n\nThe getSingleScalarResult() method that executes the query uses a very\nminimalistic hydration mode that only grabs the first value of the first\nresult column. Therefore in combination with the DQL to SQL Query Parser\nCache (Doctrine2WithCacheTestSuite) we get a result almost as fast\nresult as the PDO handcrafted scenario, because we essentially get the\ntransformed SQL query from the cache for this DQL, execute it and grab\nthe value.\n\nHydration Performance (Scenario 4 and 5)\n========================================\n\nIn the field of hydration Doctrine 2 is either equally fast or seems\n\"only\" up to 40% slower than Propel 1.4 or Propel 1.5 based on the two\nscenarios. The main reason here is really only that since Doctrine 2\nprovides transparent persistence, it can not give lazy-loading through\nbase classes, instead it needs to inject proxy objects as stubs into the\nentities. That simply means Doctrine needs to create more objects than\npropel, thats it. Note that once the objects would actually be\nlazy-loaded, Propel would need to create these objects, too. The\ndifference is that Doctrine needs to create them beforehand. When they\nlazy-load, no new object is created, the proxies simply populate\nthemselves with the data.\n\nA main difference, however, is that the hydration code of Doctrine is\ncompletely generic. That means this same code can handle all kinds of\ndifferent SQL results correctly, no matter how many nested joins, scalar\nvalues, aggregate values there are in the result and it can even deal\nwith strangely ordered collections in result sets (You get such stuff\nwith multiple order by clauses on different fields which order in\ndifferent directions. Combine such ordering with joining collections and\nyou get a pretty funky SQL result set).\n\nThe general approach in algorithms from the Doctrine 1.2 Hydrators were\nre-used in Doctrine 2. However, optimizations in the data structures and\nuse of the fastest internal php methods (as fast as you can get with\nphp, you know ;)) made it possible to optimize the code to yield the\nshown results.\n\nInteresting here is maybe that Doctrine 2 without caching is all in all\nstill a lot faster than Doctrine 1 with caching, so this looks like a\ngood improvement. Furthermore, the query cache in Doctrine 2 is very\neffective and almost completely removes all the overhead of DQL. The\nquery cache is what allows us to provide this extremely powerful\nabstraction that is immensely flexible. If you dont like DQL yet, you\nshould read up on domain-specific languages and object query languages\nin particular. It's a gem and cornerstone of this project and if you\ndont like it we can't help you.\n\nHydration with non Object Results\n=================================\n\nPutting aside the boring Propel comparisons, lets get to something\nDoctrine-specific. Because we know that read performance is very\nimportant and object instances are not necessary all the time, Doctrine\n2, just like Doctrine 1, provides many different levels of abstraction\nin-between objects and raw PDO/SQL result sets that you can go up and\ndown as you wish.\n\nThe main two intermediate levels are array graphs and flat, scalar\nresult sets (which are still not the same as the raw SQL result sets\nbecause type conversions and column name to field name conversions still\ntake place).\n\nThese alternative result formats perform as follows:\n\n | Insert | findPk | complex| hydrate| with |\n |--------|--------|--------|--------|--------|\n\n> Dc2ArrayHydrateTestSuite | 172 | 421 | 145 | 332 | 285 |\n> Dc2ScalarHydrateTestSuite | 175 | 424 | 145 | 251 | 245 |\n> Dc2WithoutProxiesTestSuite | 174 | 423 | 148 | 483 | 628 |\n\nThe first method \"Without Proxies\" still creates object instances,\nhowever, it does not replace loose ends of the object graph with\nlazy-load proxies. Be careful with such optimizations in practice\nbecause partial objects can be fragile to work with. The important point\nhere is that different levels of optimization are there when needed,\nbefore you need to finally drop all abstraction and deal with PDO/SQL\ndirectly (which is not bad, you know, just often not very convenient,\nflexible and/or robust against refactorings or schema changes).\n\nThe Array Hydration (getArrayResult()) returns a nested array structure\nthat is comparable to an object graph. Most of the time you can think of\nit as a performant read-only \"view\" of an object graph. In the case of\nBooks with Authors the result looks like:\n\n array(1) {\n [0]=>\n &array(5) {\n [\"id\"]=>\n int(1)\n [\"title\"]=>\n string(6) \"Hello0\"\n [\"isbn\"]=>\n string(4) \"1234\"\n [\"price\"]=>\n float(0)\n [\"author\"]=>\n &array(4) {\n [\"id\"]=>\n int(1143)\n [\"firstName\"]=>\n string(8) \"John1142\"\n [\"lastName\"]=>\n string(7) \"Doe1142\"\n [\"email\"]=>\n NULL\n }\n }\n\nThese array graphs can be built from basically any query. Its backed by\nroughly the same algorithm that allows the arbitrary object hydration\nwith indefinite joins and even scalar and aggregate values in between.\n\nIn the case where your objects implement ArrayAccess, you can often use\nobject and array results interchangeably without the need to update view\ncode.\n\nConclusion\n==========\n\nWhat that all means is mainly that if you have an application that looks\n(almost) exactly like the benchmarking code used here, then you (maybe)\ngot some useful numbers to look at, otherwise ... not.\n\nApart from that we hope this convinces you that we're not wasting your\nCPU cycles on purpose. Doctrine 2 is a huge balancing act between\nflexibility, features and performance and it worked out well so far.\n", - "date": "2010-03-17 00:00:00" + "contents": "While Doctrine 1 had validation nested inside the `Doctrine_Record`\ninstance this is not the case in Doctrine 2 anymore. We won't ship\nDoctrine 2 with any validators, the reason being that we think all the\nframeworks out there already ship with quite decents ones that can be\nintegrated into your Domain easily. Besides us being ORM experts not\nwanting to maintain yet another validation library, moving the\nresponsibility of validation into the domain layer also allows you to\nintegrate it much easier into frameworks form libraries for example.\n\nWhat we do offer are hooks to execute any kind of validation inside the\nDoctrine ORM.\n\nEntities can register lifecycle event methods with Doctrine that are\ncalled on different occasions. For validation we would need to hook into\nthe events called before persisting and updating. Even though we don't\nsupport validation out of the box, the implementation is even simpler\nthan in Doctrine 1 and you will get the additional benefit of being able\nto re-use your validation in any other part of your domain.\n\nSay we have an `Order` with several `OrderLine` instances. We never want\nto allow any customer to order for a larger sum than he is allowed to:\n\n~~~~ {.sourceCode .php}\ncustomer->getOrderLimit();\n\n $amount = 0;\n foreach ($this->orderLines AS $line) {\n $amount += $line->getAmount();\n }\n\n if ($amount > $orderLimit) {\n throw new CustomerOrderLimitExceededException();\n }\n }\n}\n~~~~\n\nNow this is some pretty important piece of business logic in your code,\nenforcing it at any time is important so that customers with a unknown\nreputation don't owe your business too much money.\n\nWe can enforce this constraint in any of the metadata drivers. First\nAnnotations:\n\n~~~~ {.sourceCode .php}\n\n\n\nOnly two days after making available the first release candidate we have\nprepared the second release candidate and made it available for\ndownload. This release contains dozens and dozens of bug fixes as well\nas a few new minor features required to fill some holes/gaps in the 1.0\nAPI before releasing. Below are some highlights of this release.\n\n
\n\nWe will have one more release candidate on either Friday or Saturday of\nthis week and Doctrine 1.0 Stable will be released Monday September 1st\n2008. If you haven't given the 1.0 branch a try yet, please do so and\nreport any issues to us so that we can get them fixed before Monday.\nThanks!\n\n
\n\n\n", + "date": "2008-08-27 00:00:00" }, { - "url": "/2008/02/14/doctrine-all-grown-up.html", - "slug": "doctrine-all-grown-up", - "title": "Doctrine all grown up", + "url": "/2010/07/21/mongodb-odm-query-builder-api.html", + "slug": "mongodb-odm-query-builder-api", + "title": "MongoDB ODM: Query Builder API", "authorName": "jwage", "authorEmail": "", - "contents": "\n\nOver the past several months, Doctrine has done some growing up. While\nthe code has been under constant development for over 2 years, it hasn't\nbeen until the last 6 months that Doctrine has gotten a proper home and\ninfrastructure to support the growth of the project over the coming\nyears. Some of the things we've been able to accomplish are listed\nbelow:\n\n
\n\nAll these things are great for the project and we hope it serves the\nproject well in the long run. Now we have some plans from today on. Soon\nwe will begin to phase out the 0.9 branch completely and it will be\nreplaced with the 0.10 branch. In the coming days we will release 0.9.1\nand 0.10.1. The next release after that will be 0.10.2 and the 0.9\nbranch will officially not be supported any longer. Everyone will be\nrecommended to upgrade to 0.10.2. On another note, trunk development\ntowards 1.0 has been furious in the past month or so. Romanb has\nspearheaded the re factorings required to bring Doctrine to the level\nrequired for a 1.0 release. We will continue developing in trunk towards\n1.0 while maintaining the 0.10.x branch bringing you bug fixes daily.\n\n
\n\n\n", - "date": "2008-02-14 00:00:00" + "contents": "The Doctrine MongoDB Object Document Mapper includes a fluent object\noriented API for building queries to execute against MongoDB. Recently\nsome changes were made to the API to simplify it and make it more\nreadable. This blog post aims to demonstrate and introduce the new API\nto you!\n\nQuery Types\n===========\n\nThe API still supports all the types of queries you would expect:\n\n- [find](#find)\n- [insert](#insert)\n- [update](#update)\n- [delete](#delete)\n\nContinue reading to see examples for each of the above types of queries!\n\n\\#\\# Find\n\nYou can easily find documents by just creating a new `Query` object with\nthe `createQuery()` method. A new `Query` object defaults to a `find`\nquery so you just need to pass the name of the document to query for:\n\n~~~~ {.sourceCode .php}\ncreateQuery('User');\n~~~~\n\nYou can change the document being queried for by using the `find()`\nmethod:\n\n~~~~ {.sourceCode .php}\nfind('Project');\n~~~~\n\nConditions\n----------\n\nYou can limit the returned documents by specifying some conditions:\n\n~~~~ {.sourceCode .php}\nfield('title')->equals('The Doctrine Project');\n~~~~\n\nMaybe you want to only return projects created after today:\n\n~~~~ {.sourceCode .php}\nfield('createdAt')->greaterThan(new MongoDate(time()));\n~~~~\n\nYou can even a condition on an embedded document:\n\n~~~~ {.sourceCode .php}\nfield('profile.firstName')->equals('Jonathan');\n~~~~\n\nAlso, you can add a condition for a referenced document to filter by id:\n\n~~~~ {.sourceCode .php}\nfield('account.$id')->equals($accountId);\n~~~~\n\nThe `field()` method specifies the current field to add the conditions\nto. You can optionally use the magical `__call()` feature of the `Query`\nobject to specify the current field as well:\n\n~~~~ {.sourceCode .php}\ncreatedAt()->greaterThan(new MongoDate(time()));\n~~~~\n\nAll the methods you'd expect can be used in combination with the\n`field()` method for adding conditions to your query:\n\n- equal(\\$value)\n- where(\\$javascript)\n- not(\\$value)\n- in(\\$values)\n- notIn(\\$values)\n- notEqual(\\$value)\n- greaterThan(\\$value)\n- greaterThanOrEq(\\$value)\n- lessThan(\\$value)\n- lessThanOrEq(\\$value)\n- range(\\$start, \\$end)\n- size(\\$size)\n- exists(\\$bool)\n- type(\\$type)\n- all(\\$values)\n- mod(\\$mod)\n\n\\#\\# Insert\n\nYou can easily insert new documents using the `Query` API as well. Just\nuse the `insert()` method in combination with `field()` and `set()`:\n\n~~~~ {.sourceCode .php}\ncreateQuery('User')\n ->insert()\n ->field('username')->set('jwage')\n ->field('password')->set('password');\n~~~~\n\nIf you want to set the new document to insert you can use the\n`setNewObj()` method:\n\n~~~~ {.sourceCode .php}\ncreateQuery('User')\n ->insert()\n ->setNewObj(array(\n 'username' => 'jwage',\n 'password' => 'password'\n ));\n~~~~\n\n\\#\\# Update\n\nIf you want to update a document you can use the `update()` method in\ncombination with `field()`, `set()` and conditions. Here is an example\nwhere we create a query to update a user with the username `jwage` and\ngive him a new password:\n\n~~~~ {.sourceCode .php}\ncreateQuery('User')\n ->update()\n ->field('password')->set('newpassword')\n ->field('username')->equals('jwage');\n~~~~\n\n\\#\\# Delete\n\nYou can delete documents as well by using the `delete()` method in\ncombination with conditions. Here is an example where we create a query\nto delete the user document with a username of `jwage`:\n\n~~~~ {.sourceCode .php}\ncreateQuery('User')\n ->delete()\n ->field('username')->equals('jwage');\n~~~~\n\nAs you can see the fluent API makes it a bit easier to express queries\nthat are easy to read in the same way you would read english from left\nto right. We hope to enhance and improve this API even more before we\nrelease the stable 1.0 version.\n\nYou can read more about the Query Builder API in the\n[documentation](https://www.doctrine-project.org/projects/mongodb_odm/1.0/docs/reference/query-builder-api/en#query-builder-api).\n", + "date": "2010-07-21 00:00:00" }, { - "url": "/2010/07/07/implementing-aggregate-fields.html", - "slug": "implementing-aggregate-fields", - "title": "Implementing Aggregate Fields with Doctrine 2", + "url": "/2016/07/27/doctrine-mongodb-odm-release-1.1.1.html", + "slug": "doctrine-mongodb-odm-release-1.1.1", + "title": "Doctrine MongoDB ODM release 1.1.1 ", + "authorName": "Maciej Malarz", + "authorEmail": "malarzm@gmail.com", + "contents": "We are happy to announce the immediate availability of Doctrine MongoDB\nODM\n[1.1.1](https://github.com/doctrine/mongodb-odm/releases/tag/1.1.1).\n\nBug fixes in this release\n=========================\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.1.md#111-2016-07-27).\nA full list of issues and pull requests included in this release may be\nfound in the [1.1.1\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.1.1).\n\nInstallation\n============\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.1.1\"\n }\n}\n```\n\nFuture Releases\n===============\n\nWork on the much anticipated 2.0 version of MongoDB ODM with support for\nthe new MongoDB driver is beginning; however we are unable to set a\nrelease date yet. Development will likely take some time and thus we\nhave scheduled a 1.2 version to be released before 2.0. Version 1.2 will\ninclude all features planned for 2.0 that can be introduced in a\nbackward compatible way as well as new deprecation notices for\nfunctionality we plan to remove in 2.0, which we hope will ease future\nmigration.\n\nDoctrine MongoDB ODM release 1.0.7\n==================================\n\nWe are also happy to announce the immediate availability of Doctrine\nMongoDB ODM\n[1.0.7](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.7).\n\nNotable fixes may be found in the\n[changelog](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#107-2016-07-27).\nA full list of issues and pull requests included in this release may be\nfound in the [1.0.7\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.7).\n\nYou can install the latest version using the following `composer.json`\ndefinitions:\n\n```json\n{\n \"require\": {\n \"doctrine/mongodb-odm\": \"^1.0.7\"\n }\n}\n```\n", + "date": "2016-07-27 00:00:00" + }, + { + "url": "/2012/05/29/symfony-live-2012-hackday.html", + "slug": "symfony-live-2012-hackday", + "title": "Symfony Live 2012 Hackday", "authorName": "beberlei", "authorEmail": "", - "contents": "You will often come across the requirement to display aggregate values\nof data that can be computed by using the MIN, MAX, COUNT or SUM SQL\nfunctions. For any ORM this is a tricky issue traditionally. Doctrine 2\noffers several ways to get access to these values and this article will\ndescribe all of them from different perspectives.\n\nYou will see that aggregate fields can become very explicit features in\nyour domain model and how this potentially complex business rules can be\neasily tested.\n\nAn example model\n================\n\nSay you want to model a bank account and all their entries. Entries into\nthe account can either be of positive or negative money values. Each\naccount has a credit limit and the account is never allowed to have a\nbalance below that value.\n\nFor simplicity we live in a world were money is composed of integers\nonly. Also we omit the receiver/sender name, stated reason for transfer\nand the execution date. These all would have to be added on the `Entry`\nobject.\n\nOur entities look like:\n\n~~~~ {.sourceCode .php}\nno = $no;\n $this->maxCredit = $maxCredit;\n $this->entries = new \\Doctrine\\Common\\Collections\\ArrayCollection();\n }\n}\n\n/**\n * @Entity\n */\nclass Entry\n{\n /** @Id @GeneratedValue @Column(type=\"integer\") */\n private $id;\n\n /**\n * @ManyToOne(targetEntity=\"Account\", inversedBy=\"entries\")\n */\n private $account;\n\n /**\n * @Column(type=\"integer\")\n */\n private $amount;\n\n public function __construct($account, $amount)\n {\n $this->account = $account;\n $this->amount = $amount;\n // more stuff here, from/to whom, stated reason, execution date and such\n }\n\n public function getAmount()\n {\n return $this->amount;\n }\n}\n~~~~\n\nUsing DQL\n=========\n\nThe Doctrine Query Language allows you to select for aggregate values\ncomputed from fields of your Domain Model. You can select the current\nbalance of your account by calling:\n\n~~~~ {.sourceCode .php}\ncreateQuery($dql)\n ->setParameter(1, $myAccountId)\n ->getSingleScalarResult();\n~~~~\n\nThe `$em` variable in this (and forthcoming) example holds the Doctrine\n`EntityManager`. We create a query for the SUM of all amounts (negative\namounts are withdraws) and retrieve them as a single scalar result,\nessentially return only the first column of the first row.\n\nThis approach is simple and powerful, however it has a serious drawback.\nWe have to execute a specific query for the balance whenever we need it.\n\nTo implement a powerful domain model we would rather have access to the\nbalance from our `Account` entity during all times (even if the Account\nwas not persisted in the database before!).\n\nAlso an additional requirement is the max credit per `Account` rule.\n\nWe cannot reliably enforce this rule in our `Account` entity with the\nDQL retrieval of the balance. There are many different ways to retrieve\naccounts. We cannot guarantee that we can execute the aggregation query\nfor all these use-cases, let alone that a userland programmer checks\nthis balance against newly added entries.\n\nUsing your Domain Model\n=======================\n\n`Account` and all the `Entry` instances are connected through a\ncollection, which means we can compute this value at runtime:\n\n~~~~ {.sourceCode .php}\nentries AS $entry) {\n $balance += $entry->getAmount();\n }\n return $balance;\n }\n}\n~~~~\n\nNow we can always call `Account::getBalance()` to access the current\naccount balance.\n\nTo enforce the max credit rule we have to implement the \"Aggregate Root\"\npattern as described in Eric Evans book on Domain Driven Design.\nDescribed with one sentence, an aggregate root controls the instance\ncreation, access and manipulation of its children.\n\nIn our case we want to enforce that new entries can only added to the\n`Account` by using a designated method. The `Account` is the aggregate\nroot of this relation. We can also enforce the correctness of the\nbi-directional `Account` \\<-\\> `Entry` relation with this method:\n\n~~~~ {.sourceCode .php}\nassertAcceptEntryAllowed($amount);\n\n $e = new Entry($this, $amount);\n $this->entries[] = $e;\n return $e;\n }\n}\n~~~~\n\nNow look at the following test-code for our entities:\n\n~~~~ {.sourceCode .php}\nassertEquals(0, $account->getBalance());\n\n $account->addEntry(500);\n $this->assertEquals(500, $account->getBalance());\n\n $account->addEntry(-700);\n $this->assertEquals(-200, $account->getBalance());\n }\n\n public function testExceedMaxLimit()\n {\n $account = new Account(\"123456\", $maxCredit = 200);\n\n $this->setExpectedException(\"Exception\");\n $account->addEntry(-1000);\n }\n}\n~~~~\n\nTo enforce our rule we can now implement the assertion in\n`Account::addEntry`:\n\n~~~~ {.sourceCode .php}\ngetBalance() + $amount;\n $allowedMinimalBalance = ($this->maxCredit * -1);\n if ($futureBalance < $allowedMinimalBalance) {\n throw new Exception(\"Credit Limit exceeded, entry is not allowed!\");\n }\n }\n}\n~~~~\n\nWe haven't talked to the entity manager for persistence of our account\nexample before. You can call `EntityManager::persist($account)` and then\n`EntityManager::flush()` at any point to save the account to the\ndatabase. All the nested `Entry` objects are automatically flushed to\nthe database also.\n\n~~~~ {.sourceCode .php}\naddEntry(500);\n$account->addEntry(-200);\n$em->persist($account);\n$em->flush();\n~~~~\n\nThe current implementation has a considerable drawback. To get the\nbalance, we have to initialize the complete `Account::$entries`\ncollection, possibly a very large one. This can considerably hurt the\nperformance of your application.\n\nUsing an Aggregate Field\n========================\n\nTo overcome the previously mentioned issue (initializing the whole\nentries collection) we want to add an aggregate field called \"balance\"\non the Account and adjust the code in `Account::getBalance()` and\n`Account:addEntry()`:\n\n~~~~ {.sourceCode .php}\nbalance;\n }\n\n public function addEntry($amount)\n {\n $this->assertAcceptEntryAllowed($amount);\n\n $e = new Entry($this, $amount);\n $this->entries[] = $e;\n $this->balance += $amount;\n return $e;\n }\n}\n~~~~\n\nThis is a very simple change, but all the tests still pass. Our account\nentities return the correct balance. Now calling the\n`Account::getBalance()` method will not occour the overhead of loading\nall entries anymore. Adding a new Entry to the `Account::$entities` will\nalso not initialize the collection internally.\n\nAdding a new entry is therefore very performant and explictly hooked\ninto the domain model. It will only update the account with the current\nbalance and insert the new entry into the database.\n\nTackling Race Conditions with Aggregate Fields\n==============================================\n\nWhenever you denormalize your database schema race-conditions can\npotentially lead to inconsistent state. See this example:\n\n~~~~ {.sourceCode .php}\nfind('Bank\\Entities\\Account', $accId);\n\n// request 2 account\n$account2 = $em->find('Bank\\Entities\\Account', $accId);\n\n$account1->addEntry(-200);\n$account2->addEntry(-200);\n\n// now request 1 and 2 both flush the changes.\n~~~~\n\nThe aggregate field `Account::$balance` is now -200, however the SUM\nover all entries amounts yields -400. A violation of our max credit\nrule.\n\nYou can use both optimistic or pessimistic locking to save-guard your\naggregate fields against this kind of race-conditions. Reading Eric\nEvans DDD carefully he mentions that the \"Aggregate Root\" (Account in\nour example) needs a locking mechanism.\n\nOptimistic locking is as easy as adding a version column:\n\n~~~~ {.sourceCode .php}\nfind('Bank\\Entities\\Account', $accId, LockMode::PESSIMISTIC_READ);\n~~~~\n\nKeeping Updates and Deletes in Sync\n===================================\n\nThe example shown in this article does not allow changes to the value in\n`Entry`, which considerably simplifies the effort to keep\n`Account::$balance` in sync. If your use-case allows fields to be\nupdated or related entities to be removed you have to encapsulate this\nlogic in your \"Aggregate Root\" entity and adjust the aggregate field\naccordingly.\n\nConclusion\n==========\n\nThis article described how to obtain aggregate values using DQL or your\ndomain model. It showed how you can easily add an aggregate field that\noffers serious performance benefits over iterating all the related\nobjects that make up an aggregate value. Finally I showed how you can\nensure that your aggregate fields do not get out of sync due to\nrace-conditions and concurrent access.\n", - "date": "2010-07-07 00:00:00" + "contents": "Next week will be [Symfony Live\n2012](https://paris2012.live.symfony.com/) in Paris and the Doctrine\nDBAL/ORM Team will be represented by Guilherme, Alexander, Marco and me.\nJeremy is also there and knows the MongoDB ODM inside out.\n\nGuilherme and Jeremy will give two talks:\n\n- \"Using MongoDB responsibly\" Jeremy Mikola\n- \"ORMs don't kill your database, developers do!\" Guilherme Blanco\n\nAdditionally all of us will participate in the hackday on saturday.\n\nDoctrine 2.3 is around the corner (propably during July) and we still\nhave some features that we want to finalize and work on together. Feel\nfree to join us if you want to contribute. We are always looking for\ninterested developers that help with tickets, support, documentatation\nor anything else.\n\nDuring the conference you can find us by looking for the [dark blue\nDoctrine\nt-shirts](http://distilleryimage8.instagram.com/30f1aa1ea9d311e1a92a1231381b6f02_7.jpg).\n", + "date": "2012-05-29 00:00:00" }, { - "url": "/2015/04/15/cache-1-4-1.html", - "slug": "cache-1-4-1", - "title": "Cache 1.4.1 Released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Cache\n1.4.1.\n\nThis release fixes a series of bugs related with `null`, `false` or\ntruncated data in the `SQLite3` and `Memcache` adapters\n([\\#62](https://github.com/doctrine/cache/pull/62),\n[\\#65](https://github.com/doctrine/cache/pull/65),\n[\\#67](https://github.com/doctrine/cache/pull/67)).\n\nImprovements have been made to reduce the `SQLite3` cache adapter memory\nusage ([\\#64](https://github.com/doctrine/cache/pull/64)).\n\nIf you use an opcode cache such as OPCache (available since PHP 5.5),\nyou will get major performance improvements in read operations in the\n`PhpFileCache`, which shouldn't cause any stat calls at all now\n([\\#69](https://github.com/doctrine/cache/pull/69)).\n\nMulti-get support was built into the `Redis` adapter\n([\\#60](https://github.com/doctrine/cache/pull/60)).\n\nA new `VoidCache` adapter has been introduced - useful for testing\n([\\#61](https://github.com/doctrine/cache/pull/61)).\n\nYou can find the complete changelog for this release in the [release\nnotes](https://github.com/doctrine/cache/releases/tag/v1.4.1).\n\nYou can install the Cache component using Composer and the following\n`composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/cache\": \"1.4.1\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-04-15 00:00:00" + "url": "/2016/02/02/doctrine_module_1_0_0_stable_release.html", + "slug": "doctrine_module_1_0_0_stable_release", + "title": "DoctrineModule 1.0.0 we have a stable release", + "authorName": "Gianluca Arbezzano", + "authorEmail": "gianarb92@gmail.com", + "contents": "We are happy to announce the first stable release for DoctrineModule!\n[1.0.0](https://github.com/doctrine/DoctrineModule/releases/tag/1.0.0)\nis ready to go after a couple of years of work.\n\nThe [\"Initial\nCommit\"](https://github.com/doctrine/DoctrineModule/commit/13ededfcf10f9db6a4113cd9bdb4956ea145b6cd)\ndates back to the date Oct 22, 2011 after 4 years, we are ready.\n\nThanks at all for yours contributions!\n\nUpdate your composer configuration to use the stable version of this\nproject.\n\n```json\n{\n \"require\": {\n \"doctrine/doctrine-module\": \"~1.0\"\n }\n}\n```\n\nChanges since 0.10.0\n====================\n\nThis is a list of issues resolved in `1.0.0` since `0.10.0`:\n\n- [[\\#523]](https://github.com/doctrine/DoctrineModule/pull/523)\n Remove deprecated api call from test\n- [[\\#547]](https://github.com/doctrine/DoctrineModule/pull/547) Allow\n for the use of ZendCacheServiceStorageCacheAbstractServiceFactory\n\nPlease report any issues you may have with the update on the mailing\nlist or on [GitHub](https://github.com/doctrine/DoctrineModule/issues).\n\nRemember to read [our\ndocumentation](https://github.com/doctrine/DoctrineModule/tree/master/docs)\nand improve it with your knowledge.\n", + "date": "2016-02-02 00:00:00" }, { - "url": "/2008/11/25/doctrine-1-0-4-released.html", - "slug": "doctrine-1-0-4-released", - "title": "Doctrine 1.0.4 Released", + "url": "/2011/02/19/doctrine-mongodb-odm-beta2-released.html", + "slug": "doctrine-mongodb-odm-beta2-released", + "title": "Doctrine MongoDB ODM BETA2 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Today we are happy to introduce the immediate availability of Doctrine\n1.0.4. This is a major bug fix release for the 1.0 branch of Doctrine.\nIt contains over 75 bug fixes and it is recommended that you upgrade as\nsoon as possible. As always you can view the [change\nlog](https://www.doctrine-project.org/change_log/1_0_4) on the website\nand [download here](https://www.doctrine-project.org/download).\n", - "date": "2008-11-25 00:00:00" - }, - { - "url": "/2014/09/23/orm-245.html", - "slug": "orm-245", - "title": "ORM 2.4.5 released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine ORM\n2.4.5, which fixes [an HHVM/PHP7 issue related with\nfunc\\_get\\_args()](https://3v4l.org/NIqRh).\n\nYou can find all the changes on JIRA:\n\n- [ORM\n 2.4.5](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10722)\n - 1 issue fixed\n\nYou can install the ORM using Composer and the following `composer.json`\ncontents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/orm\": \"2.4.5\"\n }\n}\n~~~~\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2014-09-23 00:00:00" + "contents": "After a long wait, I am happy to bring you the second beta release of\nthe new Doctrine persistence layer for [MongoDB](https://www.mongodb.com).\nThis release includes dozens of bug fixes and improvements and it is\nrecommended that you upgrade as soon as possible. You can learn about\nhow to get the code here.\n\nAbout the Release\n=================\n\nMy full-time job is working at OpenSky, where we use the MongoDB ODM and\nmany of the improvements and work are a result of the development we've\nbeen doing there. The changelog is very large as the development spanned\nalmost 5 months with commits from over 15 developers all over the world.\nHere are some of the people who've contributed this release:\n\n- [avalanche123](https://github.com/avalanche123)\n- [bobthecow](https://github.com/bobthecow)\n- [kriswallsmith](https://github.com/kriswallsmith)\n- [jmikola](https://github.com/jmikola)\n- [ornicar](https://github.com/ornicar)\n- [jseverson](https://github.com/jseverson)\n- [pgodel](https://github.com/pgodel)\n- [weaverryan](https://github.com/weaverryan)\n- [docteurklein](https://github.com/docteurklein)\n- [ThomasAdam](https://github.com/ThomasAdam)\n- [dan](https://github.com/dan)\n- [fabpot](https://github.com/fabpot)\n- [IamPersistent](https://github.com/IamPersistent)\n- [igorw](https://github.com/igorw)\n- [Vrtak-CZ](https://github.com/Vrtak-CZ)\n\nDocumentation\n=============\n\nCheck out the\n[documentation](https://www.doctrine-project.org/docs/mongodb_odm/1.0/en)\nas it is has been completely updated and improved for this release. We\nfully migrated the docs to use reST and Sphinx to generate our\ndocumentation so it is much improved over the previous versions.\n\nDoctrine Project as a Whole\n===========================\n\nThe MongoDB ODM is one of a few new projects under the Doctrine\numbrella. You may also want to take a look at the CouchDB ODM and the\nPHP Content Repository ODM. These projects are all very exciting for the\nDoctrine Project but more for PHP as a whole. They are a new generation\nof libraries built for PHP 5.3 that bring a higher level of code quality\nto your PHP projects.\n\nIf you encounter any problems, bugs or issues please report them in\nJira. If you have any questions you can try a mailing list or IRC. Read\nmore about the Doctrine community here.\n", + "date": "2011-02-19 00:00:00" }, { - "url": "/2008/04/30/wow-1000-tickets.html", - "slug": "wow-1000-tickets", - "title": "Wow! 1000 tickets", + "url": "/2009/11/10/doctrine-1-2-0-beta2-released.html", + "slug": "doctrine-1-2-0-beta2-released", + "title": "Doctrine 1.2.0-BETA2 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Last night the 1000th ticket came rolling in. This is just a reminder to\nthe fact that Doctrine while still young, has had a very long and\nevolutionary life so far. The growth this first quarter in the community\nand contributions from all over the world really shows that Doctrine has\na bright future in PHP and I look forward to seeing all the doors that\nDoctrine will open. Thanks everyone!\n", - "date": "2008-04-30 00:00:00" - }, - { - "url": "/2015/12/31/cache-1-6-0.html", - "slug": "cache-1-6-0", - "title": "Cache 1.6.0 Released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of Doctrine Cache\n[1.6.0](https://github.com/doctrine/cache/releases/tag/v1.5.2).\n\nCache 1.6.0\n===========\n\nSupport for PHP versions below 5.5.0 was removed: please remember that\nif you are still using PHP 5.4.x or lower, the PHP project [does not\nprovide support for those versions\nanymore](https://secure.php.net/supported-versions.php).\n[\\#109](https://github.com/doctrine/cache/pull/109)\n\nNative [APCu](https://github.com/krakjoe/apcu) support was introduced:\nif you run newer versions of APCu, then you can use the new\n[ApcuCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/ApcuCache.php)\nadapter. [\\#115](https://github.com/doctrine/cache/pull/117)\n\nA\n[MultiPutCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/MultiPutCache.php)\ninterface was introduced: the\n[CacheProvider](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/CacheProvider.php)\nimplements it by default now. This interface can lead to improved\nperformance when saving multiple keys at once, if your cache adapter\nsupports such an operation.\n[\\#117](https://github.com/doctrine/cache/pull/117)\n\nThe\n[ArrayCache](https://github.com/doctrine/cache/blob/v1.6.0/lib/Doctrine/Common/Cache/ArrayCache.php)\nnow honors the given cache entries TTL, making it possible to use it\neven in long running processes without the risk of dealing with stale\ndata. [\\#130](https://github.com/doctrine/cache/pull/130)\n\nInstallation\n============\n\nYou can install the Cache component using the following `composer.json`\ndefinitions:\n\n```bash\ncomposer require doctrine/cache:^1.6\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-12-31 00:00:00" - }, - { - "url": "/2019/05/30/doctrine-webinars.html", - "slug": "doctrine-webinars", - "title": "Doctrine Webinars", - "authorName": "Jonathan H. Wage", - "authorEmail": "jonwage@gmail.com", - "contents": "As mentioned in the [Monetizing Open Source](/2019/05/21/monetizing-open-source.html) blog post,\nDoctrine will be regularly organizing online [webinars](/events.html) hosted with [Zoom](https://zoom.us/).\nYou can join from anywhere in the world with a laptop and an internet connection. We will\nhave topics presented by Doctrine core team members and members of the community.\n\nTo get things started we have a few webinars scheduled for the next few months:\n\n- [Doctrine for Beginners](/events/2/doctrine-for-beginners.html) on June 25th by Jonathan Wage\n- [Getting Started with Doctrine MongoDB ODM](/events/3/getting-started-with-doctrine-mongodb-odm.html) on July 16th by Andreas Braun\n- [PHP Internals for the Inquisitive Developer](/events/1/php-internals-for-the-inquisitive-developer.html) on September 10th by Jeremy Mikola\n\nDon't see something that you are interested in? [Suggest](https://www.doctrine-project.org/events/suggest.html) an event topic you would like to see and we will see what we can do. We will be publishing new events in the coming weeks so check back soon!\n", - "date": "2019-05-30 00:00:00" + "contents": "Today I am happy to bring you the second beta of the latest Doctrine 1.2\nversion. This is a solid bug fix release and we're getting very close to\na stable 1.2 version of Doctrine! It is recommended that you upgrade and\n[report](https://www.doctrine-project.org/jira) any issues in\n[Jira](https://www.doctrine-project.org/jira) to help us test for\nregressions between 1.1 and 1.2.\n\nTake a look at the\n[changelog](https://www.doctrine-project.org/change_log/1_2_0_BETA2) and\ntry it out by [downloading](https://www.doctrine-project.org) it.\n", + "date": "2009-11-10 00:00:00" }, { - "url": "/2014/12/20/annotations-123.html", - "slug": "annotations-123", - "title": "Annotations 1.2.3 released", - "authorName": "Marco Pivetta", - "authorEmail": "ocramius@gmail.com", - "contents": "We are happy to announce the immediate availability of\n`doctrine/annotations` 1.2.3.\n\nThe release includes fixes for regressions that were introduced by some\nbug-fixes in version 1.2.2:\n\n- [49: \\#46 - applying correct chmod() to generated cache\n file](https://github.com/doctrine/annotations/pull/49)\n- [50: Hotfix: match escaped quotes (revert\n \\#44)](https://github.com/doctrine/annotations/pull/50)\n\nYou can install the Annotations library using Composer and the following\n`composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/annotations\": \"1.2.3\"\n }\n}\n~~~~\n", - "date": "2014-12-20 00:00:00" + "url": "/2008/07/02/doctrine-1-0-and-symfony-1-2.html", + "slug": "doctrine-1-0-and-symfony-1-2", + "title": "Doctrine 1.0 and symfony 1.2", + "authorName": "jwage", + "authorEmail": "", + "contents": "This morning Fabien from the symfony project announced the roadmap for\nthe next major version of symfony, 1.2. He announced that Doctrine would\nbe officially supported as a \"first class citizen.\" The time couldn't be\nbetter as symfony 1.2 is scheduled to be released in October and\nDoctrine is slated to release 1.0 around the same time. This is good\nnews for Doctrine, symfony and more importantly PHP in general. I look\nforward to seeing what comes of all this in the coming months.\n", + "date": "2008-07-02 00:00:00" }, { - "url": "/2010/07/30/doctrine-mongodb-odm-1-0-0alpha2-released.html", - "slug": "doctrine-mongodb-odm-1-0-0alpha2-released", - "title": "Doctrine MongoDB ODM 1.0.0ALPHA2 Released", + "url": "/2008/05/31/0-11-0-rc3-released.html", + "slug": "0-11-0-rc3-released", + "title": "0.11.0-RC3 Released", "authorName": "jwage", "authorEmail": "", - "contents": "Today I am happy to bring you the second alpha release of the brand new\nDoctrine MongoDB Object Document Mapper (ODM). The release contains\nseveral bug fixes and a few enhancements. You now have the ability to\nmix types of documents in references and embedded documents. You can\nread the [blog\npost](https://www.doctrine-project.org/2010/07/20/mixing-types-of-documents.html)\nabout mixing types of documents to learn more.\n\n\n\nHi, my name is Gediminas Morkevicius, I have 4 year experience in C++\nand PHP 5 and I'm very keen on new technologies and Doctrine2 is one of\nthem. Development is not only a job for me, but it is my lifestyle and\nI'm pleased to give some love back to Doctrine2.\n\n
\n\n\nI would like to thank Doctrine2 and Symfony2 teams for these wonderful\nprojects. They have great potential.\n\n
\n\n\nToday I would like to introduce something new to the Doctrine\ndocumentation, the Cookbook. This differs from the manual in that it\nwill contain real world examples and tutorials of how you can use\nDoctrine on a daily basis whereas the manual is more of a technical\nbreakdown of the features in Doctrine. We will be publishing many\nadditions to the cookbook in the coming weeks. To start off we have\npublished the following tutorials:\n\n
\n\nIf you are interested in contributing to the Doctrine documentation by\nadding new things or translations please contact me at\n[jonwage@gmail.com](mailto:jonwage@gmail.com).\n\n
\n\n\n", + "date": "2008-06-23 00:00:00" + }, + { + "url": "/2009/01/30/new-documentation-pdf-downloads.html", + "slug": "new-documentation-pdf-downloads", + "title": "New Documentation PDF Downloads", + "authorName": "jwage", + "authorEmail": "", + "contents": "Today we have some great news! Thanks to Fabien from the [symfony\nproject](http://www.symfony-project.org) , we now have a new way to\ngenerate the PDF version of our documentation. The new PDFs are a MAJOR\nstep up from the previous style of PDF and am very pleased with it!\nCheck it out by viewing the 1.0 version of [The Guide to Doctrine for\nPHP](https://www.doctrine-project.org/documentation/manual/1_0/en/pdf) or\n[The Doctrine\nCookbook](https://www.doctrine-project.org/documentation/cookbook/1_0/en/pdf).\n\nWhat is next?\n=============\n\n- API Documentation available as PDF.\n- Downloadable package/zip file containing PDF versions of all\n documentation.\n- User submitted articles, snippets, tutorials, etc. to complement the\n official documentation.\n- ...Printed book.\n\nPrinted Book\n============\n\nHere is a teaser of the first draft of the front cover for the printed\nversion of the book. Big thanks goes out to Jason O'Brien from\ncentre{source} for doing the design work. The printed copy will be\navailable on lulu very soon we just need to do some more proof reading\nand Q&A on everything before it is ready. The printed version of the\nbook will use a slightly modified version of the PDF that is available\nfor download on the web.\n", + "date": "2009-01-30 00:00:00" + }, + { + "url": "/2011/12/20/doctrine2-2-beta.html", + "slug": "doctrine2-2-beta", + "title": "Doctrine 2.2 Beta", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "We are proud to announce the start of the beta phase of Doctrine 2.2. I\nthink we implemented a nice amount of new features and refactored lots\nof the code-base for simplicity and performance. Additionally we found a\nbunch of new developers that contributed considerable amount of code.\n\nA top list of the changes includes:\n\n- Filtering entities and associations based on rules that can be\n parameterized, enabled or disabled, developed by asm89\n- Support for complex SQL types such as Geometries, IPs, develped by\n jsor.\n- Bit Comparisions in DQL, developed by Fabio.\n- Annotation Refactorings by Fabio and johannes.\n- DQL Refactoring, ORDER BY and GROUP BY supporting result variables\n of SELECT expressions.\n- Alias for entities in DQL results.\n- Result Cache refactoring\n- Flush for single entities\n\nSee the changelogs of all three projects Common, DBAL, ORM:\n\n- [ORM](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10157)\n- [DBAL](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10142)\n- [Common](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10152)\n\nIn the next weeks will stabilize this code and add documentation for all\nthe new features. Additionally we try to drive the bug count down in the\n2.1 branch as well.\n\nPlease test this beta with your projects to find any incompatibilities.\nSee the\n[UPGRADE\\_2\\_2](https://github.com/doctrine/orm/blob/master/UPGRADE.md#upgrade-to-22)\nfile to see backwards incompatible changes.\n\nYou can install the Beta through\n[Github](https://github.com/doctrine/orm) , \\`PEAR\n[http://pear.doctrine-project.org](http://pear.doctrine-project.org)\\>\\`\\_\nor through [Composer](https://packagist.org):\n\n> {\n> : \"require\": { \"doctrine/orm\": \"2.2.0-BETA1\" }\n>\n> }\n", + "date": "2011-12-20 00:00:00" + }, + { + "url": "/2012/09/20/doctrine-2-3-final.html", + "slug": "doctrine-2-3-final", + "title": "Doctrine 2.3 final relased", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "**20.9.2012**\n\nAfter a 2 month long phase of beta and release candidates we can finally\nannounce the release of Doctrine 2.3. This includes new versions for the\npackages Common, DBAL and ORM.\n\nThis release trys to keep backwards compatibility to every previous\nrelease as much as possible, however some slight changes might be\nnecessary to your applications. See the UPGRADE files of each project\nfor details:\n\n- [ORM](https://github.com/doctrine/orm/blob/master/UPGRADE.md)\n- [DBAL](https://github.com/doctrine/dbal/blob/master/UPGRADE.md)\n\nCompared to previous versions there are no new blockbuster feature, but\nmany little optimizations:\n\n- Custom ID Generators\n- Naming Strategies (Camel-, Underscore Cased)\n- Collection Criteria API\n- @AssociationOverride and @AttributeOverride (useful for Trait and\n MappedSuperclass)\n- Arbitrary JOIN Syntax (FROM User u JOIN Comment c WITH c.user =\n u.id)\n- Named Native Queries\n\nThe complete changelogs are listed on JIRA:\n\n- [Common\n Changelog](https://www.doctrine-project.org/jira/browse/DCOM/fixforversion/10183)\n- [DBAL\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10184)\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10185)\n\nWe will flesh out the documentation and information about all new\nfeatures in the coming month. If you want to contribute to the\ndocumentation of new features see the\n[DBAL](https://github.com/doctrine/dbal-documentation) and\n[ORM](https://github.com/doctrine/orm-documentation) documentation links\non Github.\n\nYou can install the final release through\n[Github](https://github.com/doctrine/orm) or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.0\"\n }\n }\n\nThe downloadable packages will be available later today.\n", + "date": "2012-09-20 00:00:00" + }, + { + "url": "/2021/05/24/orm2.9.html", + "slug": "orm2.9", + "title": "New Release: Doctrine ORM 2.9 with Attributes, Typed Properties, more", + "authorName": "Benjamin Eberlei", + "authorEmail": "kontakt@beberlei.de", + "contents": "We have released a new minor version 2.9 of Doctrine ORM, the first version\nwith support for using PHP 8 Attributes as a new driver for mapping entities\nand several other changes. [See all changes and contributors in the\nChangelog](https://github.com/doctrine/orm/releases/tag/2.9.0) on Github.\n\n## Attributes Mapping Driver\n\nThe following code example shows many of the mappings that are re-using\nthe annotation classes for familiarity:\n\n```php\nuse Doctrine\\DBAL\\Types\\Types;\nuse Doctrine\\ORM\\Mapping AS ORM;\n\n#[ORM\\Entity(repositoryClass: PostRepository::class)]\nclass Post\n{\n #[ORM\\Column(type: Types::INTEGER)]\n #[ORM\\Id, ORM\\GeneratedValue(strategy: 'AUTO')]\n private ?int $id;\n\n #[ORM\\Column(type: Types::BOOLEAN)]\n private bool $published = false;\n\n #[ORM\\Column(type: Types::SIMPLE_ARRAY)]\n private array $text = [];\n\n #[ORM\\ManyToOne(targetEntity: User::class)]\n public $author;\n\n #[ORM\\ManyToMany(targetEntity: Tag::class)]\n #[ORM\\JoinTable(name: \"post_tags\")]\n #[ORM\\JoinColumn(name: \"post_id\", referencedColumnName: \"id\")]\n #[ORM\\InverseJoinColumn(name: \"tag_id\", referencedColumnName: \"id\")]\n public Collection $tags;\n}\n```\n\n## Typed Property Defaults\n\nSince PHP 7.4 types can be declared on class properties and Doctrine now\nuses these type declarations to reduce amount of mapping boilerplate:\n\n- Columns don't need the type definitions\n- ManyToOne and OneToOne don't need target entity definitions\n\nExample:\n\n```php\nuse Doctrine\\ORM\\Mapping AS ORM;\n\n#[ORM\\Entity(repositoryClass: UserRepository::class)]\nclass User\n{\n #[ORM\\Id, ORM\\Column, ORM\\GeneratedValue]\n public ?int $id = null;\n\n #[ORM\\Column]\n public \\DateTime $created;\n\n #[ORM\\ManyToOne]\n public Email $email;\n}\n```\n\n## Psalmified APIs\n\nImproved the documentation to make sure static analysis tools and IDEs know\nabout the right entity classes returned from `EntityManager`,\n`EntityRepository` and other public ORM APIs. This includes generics support\nwhen you extend `EntityRepository`.\n\n```php\nuse Doctrine\\ORM\\EntityRepository;\nuse App\\Entity\\User;\n\n/**\n * @template-extends EntityRepository\n\nOver the past several months, Doctrine has done some growing up. While\nthe code has been under constant development for over 2 years, it hasn't\nbeen until the last 6 months that Doctrine has gotten a proper home and\ninfrastructure to support the growth of the project over the coming\nyears. Some of the things we've been able to accomplish are listed\nbelow:\n\n
\n\nAll these things are great for the project and we hope it serves the\nproject well in the long run. Now we have some plans from today on. Soon\nwe will begin to phase out the 0.9 branch completely and it will be\nreplaced with the 0.10 branch. In the coming days we will release 0.9.1\nand 0.10.1. The next release after that will be 0.10.2 and the 0.9\nbranch will officially not be supported any longer. Everyone will be\nrecommended to upgrade to 0.10.2. On another note, trunk development\ntowards 1.0 has been furious in the past month or so. Romanb has\nspearheaded the re factorings required to bring Doctrine to the level\nrequired for a 1.0 release. We will continue developing in trunk towards\n1.0 while maintaining the 0.10.x branch bringing you bug fixes daily.\n\n
\n\n\n", + "date": "2008-02-14 00:00:00" + }, + { + "url": "/2014/12/16/orm-247.html", + "slug": "orm-247", + "title": "ORM 2.4.7 released", "authorName": "Marco Pivetta", "authorEmail": "ocramius@gmail.com", - "contents": "We released [Doctrine Instantiator\n1.0.0](https://github.com/doctrine/instantiator/releases/tag/1.0.0)\nseveral weeks ago.\n\nThis project has been migrated from\n[ocramius/instantiator](https://github.com/Ocramius/Instantiator) into\nthe doctrine organization to have better maintenance, support as well as\nhandling of security related issues, which is a priority for us.\n\nThe migration has been done because all doctrine ORM and ODM projects\nwere affected by a quite big [backwards-incompatible change in PHP\n5.4.29 and PHP 5.5.13](https://bugs.php.net/bug.php?id=67072), which\n[was partially solved in PHP\n5.6.0-RC3](https://github.com/php/php-src/pull/733). The main tracking\nbug for this problem is \\`DDC-3120\\`\\_.\n\n[Doctrine Instantiator](https://github.com/doctrine/instantiator)\nprovides a simple API to build objects without directly relying on the\n[serialization\nhack](https://www.doctrine-project.org/2010/03/21/doctrine-2-give-me-my-constructor-back.html)\nthat has been explicitly used by all of our data mappers for quite some\ntime.\n\nInstallation\n============\n\nYou can install [Doctrine\nInstantiator](https://github.com/doctrine/instantiator) using Composer\nand the following `composer.json` contents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/instantiator\": \"1.0.*\"\n }\n}\n~~~~\n", - "date": "2014-09-11 00:00:00" + "contents": "We are happy to announce the immediate availability of Doctrine ORM\n2.4.7.\n\nThe release includes a fix for `null` values in column mapping options\nsupport:\n[DDC-3425](https://github.com/doctrine/orm/issues/4231) We also\nfixed various `Paginator` tool issues: - allowing DQL queries that have\n`HIDDEN` selected fields appearing both in the `SELECT` and the\n`ORDER BY` clauses:\n[DDC-3434](https://github.com/doctrine/orm/issues/4241) -\nallowing DQL queries that have `SELECT` clauses containing parameters:\n[DDC-3336](https://github.com/doctrine/orm/issues/4133)\n\nYou can find all the changes on JIRA:\n\n- [ORM\n 2.4.7](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10724)\n - 2 issues fixed\n\nYou can install the ORM using Composer and the following `composer.json`\ncontents:\n\n~~~~ {.sourceCode .json}\n{\n \"require\": {\n \"doctrine/orm\": \"2.4.7\"\n }\n}\n~~~~\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", + "date": "2014-12-16 00:00:00" }, { - "url": "/2015/08/18/doctrine-mongodb-odm-release-1-0-0.html", - "slug": "doctrine-mongodb-odm-release-1-0-0", - "title": "Doctrine MongoDB ODM release 1.0.0", - "authorName": "Maciej Malarz", - "authorEmail": "malarzm@gmail.com", - "contents": "In observance of August 18th, the day that Jon Wage tagged Doctrine\nMongoDB ODM's [first BETA\nrelease](https://github.com/doctrine/mongodb-odm/releases/tag/1.0.0BETA1),\nwe've come together for a big celebration. From humble beginnings as a\nweekend hack to port Doctrine 2's data mapper pattern to NoSQL, the ODM\nquickly became a beast of a project and cut its teeth on production\nservers early on as a core dependency of the very first Symfony2\nstartups. Today, after five years of adoption, improvements,\nrefactoring, and [countless\njokes](https://twitter.com/jmikola/status/583047759160336384?lang=en)\u2026\nwe are very happy to announce the immediate availability of Doctrine\nMongoDB ODM 1.0.0!\n\nWhat is new in 1.0.0?\n=====================\n\nFor our first stable release, we focused on fixing most known bugs (some\nof which were open for *years*), hardening existing features, and\nstraightening out ODM's behaviour and correctness where possible. In\nhopes of ensuring a pleasant upgrade experience, we have prepared a\n[checklist](https://github.com/doctrine/mongodb-odm/blob/master/CHANGELOG-1.0.md#100-2015-08-18)\nfor you, which highlights the most important changes that may require\nyour attention. A complete list of resolved issues and pull requests may\nbe found on GitHub under the [1.0.0\nmilestone](https://github.com/doctrine/mongodb-odm/issues?q=milestone%3A1.0.0).\n\nBehind the scenes: Doctrine MongoDB 1.2.0\n=========================================\n\nWe are also happy to announce the immediate availability of Doctrine\nMongoDB 1.2.0, which is the underlying driver abstraction layer employed\nby the ODM. In particular, this release sports a brand new [Aggregation\nBuilder](https://github.com/doctrine/mongodb/pull/213), along with\nimproved query builder support for [update\noperators](https://github.com/doctrine/mongodb/pull/212) and and\n[full-text search](https://github.com/doctrine/mongodb/pull/184)\nintroduced in MongoDB 2.6. For a full list of closed issues and pull\nrequests, please see the [release notes on\nGitHub](https://github.com/doctrine/mongodb/releases/tag/1.2.0).\n\nStop fooling around, I want my BETA back!\n=========================================\n\nWe apologize for any inconvenience, but Doctrine MongoDB ODM has\nofficially gone stable and we don't intend on shipping more BETAs\nanytime soon. Well, at least not until work begins on 2.0 :D\n", - "date": "2015-08-18 00:00:00" + "url": "/2008/10/12/new-hydration-modes-for-doctrine-1-1.html", + "slug": "new-hydration-modes-for-doctrine-1-1", + "title": "New hydration modes for Doctrine 1.1", + "authorName": "romanb", + "authorEmail": "", + "contents": "\n\nI would like to announce the addition of two new hydration modes to the\n1.1 branch that will be included in the 1.1 release.\n\n
\n\nWe feel that they fill an important gap between HYDRATE\\_NONE and\nHYDRATE\\_RECORD/HYDRATE\\_ARRAY.\n\n
\n\nYou can read more about the new hydration modes in the docs. Starting at\n\"Fetching data\". You can also take a look at the new test case.\n\n
\n\nWe encourage everyone to try them out and give us some feedback. Note\nthat this is a feature preview and the implementation and syntax might\nchange (or not) until the final 1.1 release, depending on how many\nissues arise and depending on the feedback.\n\n
\n\n\n", + "date": "2008-10-12 00:00:00" }, { - "url": "/2015/09/16/doctrine_dbal_2_5_2_released.html", - "slug": "doctrine_dbal_2_5_2_released", - "title": "Doctrine DBAL 2.5.2 released", - "authorName": "Steve M\u00fcller", - "authorEmail": "deeky666@googlemail.com", - "contents": "We are happy to announce the immediate availability of Doctrine DBAL\n2.5.2.\n\nThis version fixes a regression where dropping a database on PostgreSQL\ndidn't work properly anymore as well as several other issues.\n\nYou can find all the changes on JIRA:\n\n- [DBAL\n 2.5.2](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10731)\n - 24 issues fixed\n\nYou can install the DBAL using Composer and the following\n`composer.json` contents:\n\n```json\n{\n \"require\": {\n \"doctrine/dbal\": \"2.5.2\"\n }\n}\n```\n\nPlease report any issues you may have with the update on the mailing\nlist or on [Jira](https://www.doctrine-project.org/jira).\n", - "date": "2015-09-16 00:00:00" + "url": "/2010/08/07/dc2-experimental-associations-id-fields.html", + "slug": "dc2-experimental-associations-id-fields", + "title": "Experimental Doctrine 2 Feature: Associated Entities as Id Fields", + "authorName": "beberlei", + "authorEmail": "", + "contents": "Doctrine 2 supports composite keys of primitive types from the\nbeginning, however we realized early that a very common use-case is a\ncomposite key with one or more elements being associated entities. For\nexample think of a CMS System which allows Article Translations. A\ncommon SQL schema for this case would be:\n\n [sql]\n CREATE TABLE article (id INT PRIMARY KEY, title VARCHAR(255), body LONGTEXT);\n\n CREATE TABLE article_translations (article_id INT, language CHAR(3), title VARCHAR(255), body LONGTEXT, PRIMARY KEY (article_id, language));\n\nThis sort of schema cannot be mapped with Doctrine 2 currently, it would\nbe required to add another column `id` on the article\\_translations\ntable and enforce a unique constraint on article\\_id + language.\n\nUnder the umbrella of\n[DDC-117](https://github.com/doctrine/orm/issues/1772) and some\nrelated tickets there were discussions about adding a feature that would\nhelp solve this problem: Allowing to add @Id to @ManyToOne or @OneToOne\nmappings. I committed this feature into an experimental Git branch today\nand we ask you to test this with as many crazy scenarios and use-cases\nas possible.\n\nThis feature can potentially be uber-powerful, however we want to be\nsure that it works correctly and does not have to many problematic\nedge-cases. Therefore we need your feedback.\n\n- Go to\n [[https://github.com/doctrine/orm/commits/DDC-117](https://github.com/doctrine/orm/commits/DDC-117)](https://github.com/doctrine/orm/commits/DDC-117)\n to see the code\n- [Have a look at the functional\n tests](https://github.com/doctrine/orm/blob/master/tests/Doctrine/Tests/ORM/Functional/Ticket/DDC117Test.php)\n to see the synatx\n- Checkout the Git Repository and switch to the experimental branch\n `git checkout DDC-117`\n- Do crazy testing against this branch!\n\nPersonally I want this feature in core very much, however composite keys\nare very tricky. We want to find as many problematic cases with this\nfeature as possible. That would enable us to evaluate if this approach\nwill be merged into Doctrine 2.1 or not.\n\n> **NOTE**\n>\n> This feature currently only works with Annotations Mapping Driver. XML\n> and YAML will follow later.\n\nBy the way, the previous example is actually one of the functional\ntest-cases for this feature:\n\n~~~~ {.sourceCode .php}\ntitle = $title;\n $this->translations = new \\Doctrine\\Common\\Collections\\ArrayCollection();\n }\n}\n\n/**\n * @Entity\n */\nclass DDC117Translation\n{\n /**\n * @Id @ManyToOne(targetEntity=\"DDC117Article\")\n */\n private $article;\n\n /**\n * @Id @column(type=\"string\")\n */\n private $language;\n\n /**\n * @column(type=\"string\")\n */\n private $title;\n\n public function __construct($article, $language, $title)\n {\n $this->article = $article;\n $this->language = $language;\n $this->title = $title;\n }\n}\n\n$article = new DDC117Article(\"foo\");\n$em->persist($article);\n$em->flush();\n\n$translation = new DDC117Translation($article, \"en\", \"Bar\");\n$em->persist($translation);\n$em->flush();\n~~~~\n", + "date": "2010-08-07 00:00:00" }, { - "url": "/2009/06/21/doctrine-future-roadmap.html", - "slug": "doctrine-future-roadmap", - "title": "Doctrine Future Roadmap", + "url": "/2007/12/03/beta2_released.html", + "slug": "beta2_released", + "title": "Beta 2 Released", "authorName": "jwage", "authorEmail": "", - "contents": "So, lately we've been discussing and getting a lot of questions about\nthe future roadmap of Doctrine, specifically 2.0. If you are following\nPHP 5.3 you will have noticed that PHP 5.3 RC4 was released last week.\nThis means that the stable release of 5.3 is very near.\n\nBelow you will find a schedule of the roadmap we have planned for the\nupcoming months/years.\n\n| Date | Item | | -------------- |\n------------------------------------------------ | | 06/22/2009 | Branch\nDoctrine 1.2 | | 06/24/2009 | PHP 5.3.0 Stable Release (YES!!!) | |\n09/2009 | Begin 1.2 release cycle. Alpha, Beta, RC, Stable | | 09/2009 |\nFinal 6 months of 1.0 Support | | 09/2009 | Launch 2.0 Alpha 1 | |\n11/2009 | Launch 1.2.0 with Long Term Support (18 months) | | 11/2009 |\nSymfony 1.3 + Doctrine 1.2 | | 11/2009 | End Doctrine 1.1 Support | |\n03/2010 | End Doctrine 1.0 Support | | 03/2010 | Continue 2.0 release\ncycle | | ??/2010 | Release 2.0.0 with Long Term Support (18 months) | |\n06/2011 | End Doctrine 1.2 Support |\n\nWe hope that the above timeline gives PHP 5.3 plenty of time to be\nadopted before we officially stop support for the Doctrine 1.x series.\nWe think it will be plenty of time but depending how things play out, we\ncan always add more time to the support life cycle of the 1.x series,\nbut we hope to not have to. So, this Wednesday when PHP 5.3 is released,\nplease switch to it if you can and help with the adoption.\n", - "date": "2009-06-21 00:00:00" + "contents": "On Friday November 30th, the second beta release of the PHP5 Doctrine\nORM software was released. A lot of progress has been made since the\nfirst beta(formerly known as RC1). Dozens and dozens of tickets have\nbeen fixed, new features have been added, much needed re-factorings have\ntaken place and the community behind Doctrine is growing daily.\n", + "date": "2007-12-03 00:00:00" + }, + { + "url": "/2008/01/05/project_status.html", + "slug": "project_status", + "title": "Project Status", + "authorName": "jwage", + "authorEmail": "", + "contents": "Here is a short update on the current project status. We're heavily\ndeveloping towards a 1.0 release that will bring lots of enhancements\nlike improved inheritance mapping and lots of other stuff. We're\nespecially keen on making this release as stable as possible and on\npolishing the documentation.\n\nUntil then we strongly encourage everyone to use the 0.9 branch that can\nbe found here:\n[http://svn.phpdoctrine.org/branches/0.9](http://svn.phpdoctrine.org/branches/0.9)\nIt's a feature-frozen branch that recieves bugfixes. There will be no\nchanges that break backwards compatibility in this branch.\n\nThe current trunk is under heavy development, so please don't use it\nunless you are developing on Doctrine's source code or you are just very\ncurious.\n\nWhen the time for the 1.0 release comes near we will provide a migration\nguide and do everything possible to help you take the leap from 0.9 to\n1.0.\n\nPS: At this point, the the whole Doctrine team wants to apologize for\nthe version mess you've gone through (and are still getting through). We\nreally messed up in terms of release management mainly due to the lack\nof experience in this area. This stops here. 0.9 will stay and it will\nstay for a while. We're not going to rush releases again.\n\nThank you very much.\n", + "date": "2008-01-05 00:00:00" + }, + { + "url": "/2013/01/08/doctrine-2-3-2.html", + "slug": "doctrine-2-3-2", + "title": "Doctrine 2.3.2 released", + "authorName": "Benjamin Eberlei", + "authorEmail": "", + "contents": "**08.01.2013**\n\nWe have released the second mini release in the 2.3 cycle.\n\n- [DBAL\n Changelog](https://www.doctrine-project.org/jira/browse/DBAL/fixforversion/10326)\n- [ORM\n Changelog](https://www.doctrine-project.org/jira/browse/DDC/fixforversion/10324)\n\nYou can install the release through\n[Github](https://github.com/doctrine/orm) , download, PEAR or\n[Composer](https://packagist.org):\n\n {\n \"require\": {\n \"doctrine/orm\": \"2.3.1\"\n }\n }\n", + "date": "2013-01-08 00:00:00" + }, + { + "url": "/2015/05/05/doctrine-orm-module-release-0-9-0.html", + "slug": "doctrine-orm-module-release-0-9-0", + "title": "DoctrineORMModule release 0.9.0", + "authorName": "Gianluca Arbezzano", + "authorEmail": "gianarb92@gmail.com", + "contents": "The **Zend Framework Integration Team** is happy to announce the new\nrelease of **DoctrineORMModule**.\n\nDoctrineORMModule 0.9.0 is out of the door!!\n\n*Note* that this is the last version that supports\n[doctrine/migrations](https://github.com/doctrine/migrations). We are\nworking on extracting this feature into an independent module.\n\nFollow issue\n[\\#401](https://github.com/doctrine/DoctrineORMModule/pull/401).\n\nThe Following issues were solved in this release:\n: - [[\\#199] Add 'entity\\_listener\\_resolver' config\n key](https://github.com/doctrine/DoctrineORMModule/pull/199)\n - [[\\#281] Forced failing unit test for\n \\#247](https://github.com/doctrine/DoctrineORMModule/pull/281)\n - [[\\#306] Removing PHP 5.3.3\n support](https://github.com/doctrine/DoctrineORMModule/pull/306)\n - [[\\#272] Fix and test \\#270, \\#242,\n \\#285](https://github.com/doctrine/DoctrineORMModule/pull/272)\n - [[\\#311] remove unused\n statement](https://github.com/doctrine/DoctrineORMModule/pull/311)\n - [[\\#326] Highlight only uppercase\n words](https://github.com/doctrine/DoctrineORMModule/pull/326)\n - [[\\#329] remove unused\n statements](https://github.com/doctrine/DoctrineORMModule/pull/329)\n - [[\\#328] wrong var\n assignment](https://github.com/doctrine/DoctrineORMModule/pull/328)\n - [[\\#313] Prevent overriding of\n type](https://github.com/doctrine/DoctrineORMModule/pull/313)\n - [[\\#338] order the\n classes](https://github.com/doctrine/DoctrineORMModule/pull/338)\n - [[\\#346] Corrected a typo in a comment to better\n clarify](https://github.com/doctrine/DoctrineORMModule/pull/346)\n - [[\\#357] Modify sql\\_logger\\_collector class\n factory](https://github.com/doctrine/DoctrineORMModule/pull/357)\n - [[\\#360] Add example for\n entity\\_resolver](https://github.com/doctrine/DoctrineORMModule/pull/360)\n - [[\\#359] Update deprecated dialog console\n helper](https://github.com/doctrine/DoctrineORMModule/pull/359)\n - [[\\#363] Prevent ZendFormElementFile types inherit of\n StringLength\n validator...](https://github.com/doctrine/DoctrineORMModule/pull/363)\n - [[\\#365] Re-enable scrutinizer code\n coverage](https://github.com/doctrine/DoctrineORMModule/pull/365)\n - [[\\#373] Add doc for\n cache](https://github.com/doctrine/DoctrineORMModule/pull/373)\n - [[\\#347] added extra check in\n handleRequiredField](https://github.com/doctrine/DoctrineORMModule/pull/347)\n - [[\\#377] fix\n docblocks](https://github.com/doctrine/DoctrineORMModule/pull/377)\n - [[\\#376] Add latest migrations\n command](https://github.com/doctrine/DoctrineORMModule/pull/376)\n - [[\\#375] Default\n repository](https://github.com/doctrine/DoctrineORMModule/pull/375)\n - [[\\#374] Use ResolveTargetEntityListener as an event subscriber\n when\n supported](https://github.com/doctrine/DoctrineORMModule/pull/374)\n - [[\\#318] Add support for second level\n cache](https://github.com/doctrine/DoctrineORMModule/pull/318)\n - [[\\#378] Allow to set file lock for\n SLC](https://github.com/doctrine/DoctrineORMModule/pull/378)\n - [[\\#380] Fix typo in configuration file\n markdown.](https://github.com/doctrine/DoctrineORMModule/pull/380)\n - [[\\#385] Allow symfony 3.0\n components](https://github.com/doctrine/DoctrineORMModule/pull/385)\n - [[\\#388] update comment block in Module.php as no\n Module::getAutoloaderConfig()](https://github.com/doctrine/DoctrineORMModule/pull/388)\n - [[\\#389] Delete Module.php in root\n directory](https://github.com/doctrine/DoctrineORMModule/pull/389)\n - [[\\#390] travis: PHP 5.6, 7.0 nightly added, 5.3\n dropped](https://github.com/doctrine/DoctrineORMModule/pull/390)\n - [[\\#392] Use-case: caching module' s\n configuration](https://github.com/doctrine/DoctrineORMModule/pull/392)\n - [[\\#396] Removed unnecessary line in travis\n config](https://github.com/doctrine/DoctrineORMModule/pull/396)\n - [[\\#398] Composer \\* -update for stable\n version](https://github.com/doctrine/DoctrineORMModule/pull/398)\n\nTo install this version, simply update your `composer.json`:\n\n```json\n{\n \"require\": {\n \"doctrine/doctrine-orm-module\": \"0.9.0\"\n }\n}\n```\n", + "date": "2015-05-05 00:00:00" + }, + { + "url": "/2009/11/23/doctrine-1-2-0-rc1-released.html", + "slug": "doctrine-1-2-0-rc1-released", + "title": "Doctrine 1.2.0-RC1 Released", + "authorName": "jwage", + "authorEmail": "", + "contents": "Today the first release candidate for the 1.2 version of Doctrine is\navailable for [download](https://www.doctrine-project.org/download#1_2).\nWe addressed around 20 or so issues in\n[Jira](https://www.doctrine-project.org/jira) for this release and we\nhope to have a stable release by the end of November. Please test this\nlatest release and report any issues you discover in\n[Jira](https://www.doctrine-project.org/jira).\n\nView the full [change\nlog](https://www.doctrine-project.org/change_log/1_2_0_RC1) for this\nrelease and [download RC1](https://www.doctrine-project.org/download#1_2)\nnow!\n", + "date": "2009-11-23 00:00:00" + }, + { + "url": "/2009/08/24/doctrine-2-0-quality-assurance.html", + "slug": "doctrine-2-0-quality-assurance", + "title": "Doctrine 2.0 Quality Assurance", + "authorName": "guilhermeblanco", + "authorEmail": "", + "contents": "Greetings folks!\n\nToday I'd like to talk about Quality Assurance in PHP projects.\nCurrently, PHP lacks good tools for QA, but thanks to a special PHP\nuser, [Sebastian Bergmann](https://sebastian-bergmann.de/) , this is\nchanging gradually. If you don't know him, you can visit his blog and\ncheck about projects he's on. For lazy people, he's the author of\n[PHPUnit](https://www.phpunit.de) , a de-facto Unit Test suite in PHP.\n\nDoctrine 2.0 uses PHPUnit as our Unit Test suite. It relies on PEAR to\nbe installed, but you can also install it via SVN.\n\nThe main initiative of QA in PHP projects is the website\n[[http://qualityassuranceinphpprojects.com](http://qualityassuranceinphpprojects.com)](http://qualityassuranceinphpprojects.com).\nThere you can find available tools to measure, for example, how complex\nis your project and possible semantical issues.\n\nI have applied some of these tests against [Doctrine\n2.0](http://trac.doctrine-project.org/browser/trunk) to see how complex\nit is and if it can be optimized more. The first test I run is a trace\nabout how complex our code base is. The tool I used is\n[phploc](https://github.com/sebastianbergmann/phploc/tree/master). Check\nout the results:\n\n [bash]\n MacBlanco:bin guilhermeblanco$ ./phploc /Users/guilhermeblanco/www/doctrine/trunk/lib\n phploc 1.1.1 by Sebastian Bergmann.\n\n Directories: 31\n Files: 210\n\n Lines of Code (LOC): 38826\n Comment Lines of Code (CLOC): 17004\n Non-Comment Lines of Code (NCLOC): 21822\n\n Interfaces: 11\n Classes: 229\n Non-Static Methods: 1699\n Static Methods: 106\n Functions: 95\n\nOf course it still misses a couple of code to implement (CLI Tasks,\nLocking strategies, ID Generators), but now we know how big Doctrine 2.0\nis. Then, I decided to check duplicated code (possible optimization\nlocations). The tool\n[phpcpd](https://github.com/sebastianbergmann/phpcpd/tree/master) gave me\nthis feedback:\n\n [bash]\n MacBlanco:bin guilhermeblanco$ ./phpcpd /Users/guilhermeblanco/www/doctrine/trunk/lib\n phpcpd 1.1.1 by Sebastian Bergmann.\n\n Found 1 exact clones with 15 duplicated lines in 2 files:\n\n - ./Doctrine/DBAL/Platforms/MsSqlPlatform.php:126-141\n ./Doctrine/DBAL/Platforms/MySqlPlatform.php:633-648\n\n 0.04% duplicated lines out of 38826 total lines of code.\n\nI asked myself: It must be a method that could be moved to\n`AbstractPlatform.php`! So I opened both files and... no! It's a piece\nof code that cannot be optimized. So, consider Doctrine 2.0 extremely\noptimized, because there is no duplicated code internally!\n\nNow Unit Test suite. Doctrine 2.0 has a steadily growing set of Unit\nTests, and we are regularly analyzing the code coverage analysis to find\nparts that need more tests. Here is how such a coverage report is\ngenerated:\n\n [bash]\n MacBlanco:tests guilhermeblanco$ phpunit --coverage-html=./_coverage Doctrine_Tests_AllTests\n PHPUnit 3.3.17 by Sebastian Bergmann.\n\n .....................................S.S.................... 60 / 562\n ............................................................ 120 / 562\n .....................................................SSSSSSS 180 / 562\n SSSSSSSSSSSSSSSS............................................ 240 / 562\n ............................................................ 300 / 562\n ............................................................ 360 / 562\n ............................................................ 420 / 562\n ............................................................ 480 / 562\n ............................................................ 540 / 562\n ...SS.................\n\n Time: 18 seconds\n\n OK, but incomplete or skipped tests!\n Tests: 562, Assertions: 1420, Skipped: 27.\n\n Generating code coverage report, this may take a moment.\n\nThe generated coverage can be seen in the following picture.\n\nFinally, some metrics are good to inspect how stable is our code. I\napplied [pdepend](http://pdepend.org) , and it gave me these results:\n\n![jdepend chart\n](https://www.doctrine-project.org/blog-images/doctrine-2-0-qa/picture2.png)\n\n![pyramid overview\n](https://www.doctrine-project.org/blog-images/doctrine-2-0-qa/picture3.png)\n\nThe command I ran was:\n\n [bash]\n MacBlanco:bin guilhermeblanco$ ./pdepend --summary-xml=/Users/guilhermeblanco/summary.xml --jdepend-chart=/Users/guilhermeblanco/jdepend.svg --overview-pyramid=/Users/guilhermeblanco/pyramid.svg /Users/guilhermeblanco/www/doctrine/trunk/lib\n\nHere is the generated summary. If you have any other ideas/tools that we\nshould apply in our codebase to generate other metrics, please drop us a\nmessage!\n", + "date": "2009-08-24 00:00:00" + }, + { + "url": "/2009/06/17/special-price-offer-symfony-1-2-doctrine-training-workshop.html", + "slug": "special-price-offer-symfony-1-2-doctrine-training-workshop", + "title": "Special Price Offer: Symfony 1.2 + Doctrine Training Workshop", + "authorName": "jwage", + "authorEmail": "", + "contents": "As you all may know, I work for [Sensio Labs](https://sensiolabs.com)\n, the creators of the [Symfony](http://www.symfony-project.org)\nframework. Sensio offers trainings in many topics, but primarily Symfony\nand Doctrine. I will be teaching a training session June 29th to July\n1st in the San Francisco bay area that covers Symfony 1.2 and Doctrine\n1.0. We are having a little issue completely filling the class and I\nneed a few more trainees in order to fill the class to maintain the\ndate, otherwise we'll have to cancel.\n\nI am able to make a special offer to any interested parties on the price\nof the training. All things are negotiable. So if you would like to\nattend the 3 day workshop taught by myself and learn the best practices\nwhen using Symfony and Doctrine, contact me right away! Remember, the\nprice is completely negotiable so if you're a student or a member of a\ndevelopment team and would like to attend please contact me so we can\nnegotiate a price that works for you.\n\nYou can contact me at\n[jonathan.wage@sensio.com](mailto:jonathan.wage@sensio.com) to discuss\ndetails.\n", + "date": "2009-06-17 00:00:00" + }, + { + "url": "/2010/08/10/mongodb-odm-atomic-operator-improvements.html", + "slug": "mongodb-odm-atomic-operator-improvements", + "title": "MongoDB ODM: Atomic Operator Improvements", + "authorName": "jwage", + "authorEmail": "", + "contents": "Recently we've improved the support for use of atomic operators and how\nmuch it takes advantage of them in the Doctrine MongoDB ODM. Now when\nupdating embedded documents it will use dot annotation to `$set` the\nindividual properties instead of sending the entire document even if\nonly one property changes.\n\nHere is an example, first insert some new data:\n\n~~~~ {.sourceCode .php}\nsetStreet('6512 Mercomatic Ct');\n\n$user = new User();\n$user->setUsername('jwage');\n$user->setAddress($address);\n$user->addPhonenumber(new Phonenumber('6155139185'));\n\n$dm->persist($user);\n$dm->flush();\n~~~~\n\nNow if we make some changes and `flush()` again it will perform an\nupdate:\n\n~~~~ {.sourceCode .php}\ngetPhonenumbers();\n\n$address->setCity('Nashville');\n$phonenumbers[0]->setPhonenumber('booooo');\n\n$user->addPhonenumber(new Phonenumber('1234'));\n\n$dm->flush();\n~~~~\n\nThe above will result in the following queries, first it must run a\n`$set` to modify existing embedded documents:\n\n Array\n (\n [$set] => Array\n (\n [address.city] => Nashville\n [phonenumbers.0.phonenumber] => booooo\n )\n\n )\n\nThen it issues another update to `$pushAll` the new phonenumbers:\n\n Array\n (\n [$pushAll] => Array\n (\n [phonenumbers] => Array\n (\n [0] => Array\n (\n [phonenumber] => 1234\n )\n\n )\n\n )\n\n )\n", + "date": "2010-08-10 00:00:00" + }, + { + "url": "/2011/05/16/doctrine-2-1-beta-release.html", + "slug": "doctrine-2-1-beta-release", + "title": "Doctrine 2.1 Beta and Backwards Compatibility Competition", + "authorName": "beberlei", + "authorEmail": "", + "contents": "We would like to announce the first beta release of Doctrine 2.1. It is\npacked with new features that will make your life easier:\n\n- **Indexed associations:** You can force Doctrine to hydrate\n collection elements by using a field of the target entity as key,\n for example the ID or any unique field. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/working-with-indexed-associations.html).\n- **Extra Lazy Collections:** Instead of always initializing the\n complete collection in memory you can now mark a collection as extra\n lazy, leading to special SQL executed for Collection\\#count(),\n Collection\\#contains() and Collection\\#slice(). This allows to\n implement efficient pagination on collections without having to use\n DQL. It also allows to save some memory for common use-cases with\n very large collections. See the [tutorial for this\n feature](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/extra-lazy-associations.html).\n- **Identity through Foreign Entities or derived entities:** You can\n now use a foreign key as identifier of an entity. This translates to\n using @Id on a @ManyToOne or @OneToOne association. You can read up\n on this [feature in the\n tutorial](https://www.doctrine-project.org/docs/orm/2.0/en/tutorials/composite-primary-keys.html#identity-through-foreign-entities).\n- **Persister Refactoring:** Instead of reimplementing hydration in\n the persisters we now use the hydration mechanism that is used by\n DQL aswell. Sadly performance for hydration in the persisters drops\n by 5-25% for different use-cases. It starts with a drop of 5% for a\n few hydrations and increases the more hydrations you are doing in a\n request. As a benefit we could remove tons of code and use several\n optimizations that actually increase performance when using\n fetch=\"EAGER\" in ManyToOne and OneToOne associations. Furthermore\n inverse OneToOne associations previously always executed an\n additional query, which is now replaced with a join.\n- **Temporary fetch mode in DQL** On a DQL Query you can now call\n \\`\\$query-\\>setFetchMode(\\$\\`className, \\$assocName, \\$fetchMode) to\n temporarily set the fetch mode to a value different from the one\n defined in the Association Mapping. If you set a ManyToOne or\n OneToOne association to eager fetching Doctrine will use a batch\n WHERE id IN (..) query to fetch all entities in a single query.\n- **Binding Arrays to a Query:** Doctrine now implements low-level\n support for binding arrays to named or positional parameters. This\n is possible with the Doctrine::TYPE\\_INT\\_ARRAY and\n Doctrine::TYPE\\_STR\\_ARRAY parameters that you have to pass as types\n to a query you want to use this feature in. EntityRepository now\n supports passing arrays as values to a field and uses an IN query.\n- **EntityRepository Limit and OrderBy:** The method\n EntityRepository\\#findBy() now accepts additional parameters for\n ordering, limit and offset.\n- **ResultSetMapping Helper:** There is now a class that simplifies\n populating a ResultSetMapping based on an existing ClassMetadata\n instance.\n- **Zero Based Parameters in Queries:** You can now start with the\n parameter ?0 in DQL queries.\n- **Named DQL Queries in Metadata:** You can add dql queries in the\n mapping files using @NamedQueries(@NamedQuery(name=\"foo\",\n query=\"DQL\")) and access them through\n \\$em-\\>getRepository()-\\>getNamedQuery().\n- **Date related DQL functions:** Suport for DATE\\_ADD(), DATE\\_SUB()\n and DATE\\_DIFF() in DQL.\n- **New console command orm:info:** Gives details about all registered\n entities and if their mappings are valid or not.\n- **Read Only Entities:** You can set the attribute readOnly=true on\n an entity. This will only allow to persist new instances of this\n entity or removing them, they will never be considered for updating,\n thus allowing for performance optimizations where these entities are\n not considered in the UnitOfWork changeset computations.\n- **SQL Query Object:** There is now an SQL Query object in the\n Doctrine project. You can create an instance with\n \\$connection-\\>createQueryBuilder().\n- **Automatic Parameter Type Inference:** For certain parameters types\n such as integer and DateTime ORM Query::setParameter can now\n automatically infer the type instead of requiring manually passing\n the values as third parameter.\n\nDocumentation for all the feature will be updated in the next weeks. The\nrelease is planned for June 30th 2011.\n\nWith all this new features, some of them requiring large internal\nrefactorings, we want to assure that Doctrine 2.1 is backwards\ncompatible with Doctrine 2.0. Our testsuite ensuring backwards\ncompatibility is very large, but we cannot be sure that we test for\nevery edge case. That is where you as Doctrine-user come into play:\nPlease test Doctrine 2.1 with your applications and give us feedback\nabout backwards compatibility. Please report any problem on Jira or\nwrite a mail to the doctrine-user or doctrine-dev mailing list.\n\nAnyone finding a backwards incompatible change gets an honorable mention\nin the release notes and some may even get small presents! (This only\napplies to versions \\>= Doctrine 2.0.0 with no customizations and people\nliving in countries with reasonable shipping rates :-)).\n", + "date": "2011-05-16 00:00:00" + }, + { + "url": "/2009/11/04/doctrine-1-2-documentation-available.html", + "slug": "doctrine-1-2-documentation-available", + "title": "Doctrine 1.2 Documentation Available", + "authorName": "jwage", + "authorEmail": "", + "contents": "I am happy to announce that [Doctrine 1.2\ndocumentation](https://www.doctrine-project.org/documentation/manual/1_2/en)\nis now available and up to date. It might still need some work but for\nthe most part it is updated with all the new features and changes in\n1.2.\n\nNew Chapters\n============\n\n- [Data\n Hydrators](https://www.doctrine-project.org/projects/doctrine1/en/latest/manual/data-hydrators.html)\n- [Extensions](https://www.doctrine-project.org/projects/doctrine1/en/latest/manual/extensions.html)\n\nPlease read over it and create\n[Jira](https://www.doctrine-project.org/jira) issues for any problems or\ncorrections you find.\n", + "date": "2009-11-04 00:00:00" + }, + { + "url": "/2021/11/26/dbal-3.2.0.html", + "slug": "dbal-3.2.0", + "title": "New Release: Doctrine DBAL 3.2.0", + "authorName": "Sergei Morozov", + "authorEmail": "morozov@tut.by", + "contents": "We are happy to announce the immediate availability of Doctrine DBAL 3.2.0. As most of the minor releases, this one\nfocuses on new features, improvements and deprecations of the old APIs. Here are some details on the most significant\nfeatures and improvements:\n\n## Platform-aware schema comparison ([#4746](https://github.com/doctrine/dbal/pull/4746))\n\nUp until this release, the logic of comparing database schemas had a major design flaw: it took into account only the\nabstract schema definitions without taking the target platform into account.\n\nThis flaw would lead to multiple issues which shared the same root cause: the two definitions could be considered\ndifferent by the DBAL, but they would produce the same DDL.\n\nFor instance, consider the two column definitions:\n\n```php\n// old schema\n$column1 = new Column('contents', Type::getType('text'));\n\n// new schema\n$column2 = new Column('contents', Type::getType('text'), ['default' => 'Hello, world!']);\n```\n\nIf we compared them with the comparator, we'd get a diff:\n\n```php\n$comparator = new Comparator();\n$comparator->diffColumn($column1, $column2);\n// array(1) {\n// [0] =>\n// string(7) \"default\"\n// }\n```\n\nThis might be valid for the platforms that support the `DEFAULT` constraint on `TEXT` columns but isn't valid for those\nthat don't support it (e.g. MySQL). Regardless of the diff, both definitions would produce the same DDL on MySQL:\n\n```sql\ncontents LONGTEXT NOT NULL\n```\n\nAn attempt to migrate the old schema to the new one would produce a false-positive diff but applying it wouldn't result\nin any schema changes.\n\nA false-negative diff was also possible. Consider these following example:\n\n```php\n// old schema\n$column1 = new Column('settings', Type::getType('json'));\n\n// new schema\n$column2 = new Column('settings', Type::getType('json'), ['length' => 16777215]);\n```\n\nComparison of the above column definitions should have triggered a diff on MySQL and migrate the underlying column\nfrom `TEXT` to `MEDIUMTEXT` but it didn't, because the DBAL would ignore the length of the `TEXT` columns.\n\nApart from that, the DBAL would compare only a subset of the definitions, so some column options as the character set\nand collation weren't taken into account during comparison at all.\n\n### The new approach\n\nInstead of comparing abstract definitions on a per-property basis, the new implementation compares the DDL that is generated from both definitions for the target database platform. If the definitions produce the same DDL, they are considered equal. According to the tests and the number of resolved issues, this approach should be more accurate and less error-prone.\n\nImplementing this approach was impossible without introducing a new API which rendered the existing API obsolete.\n\nPrior to DBAL `3.2.0`, the schema comparator could be only instantiated directly via the `new` keyword:\n\n```php\n$comparator = new Comparator();\n```\n\nInstantiated like this, the comparator doesn't have a notion of the target database platform and cannot perform the comparison properly. That is why, this way of instantiation is deprecated in favor of instantiating the comparator by the schema manager:\n\n```php\n$schemaManager = $connection->createSchemaManager();\n$comparator = $schemaManager->createComparator();\n```\n\nThis way, the schema manager can instantiate a platform-specific comparator and provide it with the necessary context (e.g. the default collation used by the database).\n\nWhile the old API is still available, it is recommended to use the new API for more accurate comparison.\n\n## Support for `psr/cache` ([#4620](https://github.com/doctrine/dbal/pull/4620))\n\nSince the Doctrine Cache library is being sunset, the new DBAL release introduced the ability to use a PSR-6 compatible implementation for result caching.\n\nWhile both the `doctrine/cache` and `psr/cache` APIs will be supported until the next major DBAL release, we recommend users to switch to a PSR-6 compatible implementation in their projects.\n\n## Support for `psr/log` ([#4967](https://github.com/doctrine/dbal/pull/4967))\n\nThe `SQLLogger` interface was designed long ago and has certain limitations: there is no way to log messages at different logger levels and it is really challenging to extend the logger functionality without introducing breaking API changes.\n\nThe new DBAL release introduces a new middleware that can delegate logging to a PSR-3 compatible implementation.\n\nNote that the new logger won't produce the messages identical to the ones produced by the old one. If you have any processes built around analysing log messages, you may need to make some changes before adopting the new API.\n\n## Always cache the full result ([#5003](https://github.com/doctrine/dbal/pull/5003))\n\nThe implementation of the result cache prior to DBAL 3.2.0 would store the result set in the cache only once it was fetched completely. It led to the following issues:\n\n1. If the result isn't yet cached and its consumer didn't fetch it completely, the query would be executed again.\n2. In case of a cache miss, the DBAL would `get()` the cache entry twice: once to fetch the data and once to merge the just fetched result with other results that may be stored in the cache.\n\nThe new implementation stores the results in the cache right after they were fetched. It simplifies the caching layer significantly and makes its behavior more straightforward.\n\n## Add events for Transaction begin/commit/rollback ([#4622](https://github.com/doctrine/dbal/pull/4622))\n\nThe new DBAL version introduces three more transaction-related events:\n\n- `onTransactionBegin`,\n- `onTransactionCommit`,\n- `onTransactionRollBack`.\n\nSubscribing to those might be helpful if the application logic integrates the database transaction flow with the business logic implemented outside the database. For instance, in the filesystem.\n\n## Basic exception handling in IBM DB2 and SQL Server drivers ([#4929](https://github.com/doctrine/dbal/pull/4929), [#4928](https://github.com/doctrine/dbal/pull/4928))\n\nThe DBAL provides a mechanism that converts driver-specific error codes to portable error-specific exceptions. For instance an attempt to insert `NULL` into a column that has a `NOT NULL` constraint applied will result in error with the code `1566` on MySQL and in `ORA-01400` on Oracle. The DBAL will convert these two errors to a portable `NotNullConstraintViolationException`.\n\nHistorically, the DBAL drivers based on the `ibm_db2`, `sqlsrv` and `pdo_sqlsrv` extensions did not support this feature and would thow a generic `DriverException`.\n\nAs of DBAL 3.2.0, this feature is supported by all bundled drivers.\n\n## Improved `AbstractPlatform::getLengthExpression()` ([#4855](https://github.com/doctrine/dbal/pull/4855))\n\nAlthough the `LENGTH` expression was implemented for all supported database platforms, the different implementations didn't have consistent semantics:\n\n1. Most implementations would return the length in characters (Unicode code points), which is the most expected behavior.\n2. The implementations for MySQL and IBM DB2 would return the number of bytes. It worked fine for the strings that consisted only of the ANSI characters, but an attempt to use it with a wider range of characters would produce an unexpected result. For instance, the length of the string `'\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!'` might be reported as `19` instead of `12`.\n\nAs of DBAL 3.2.0, all platforms return the length in Unicode points according to the character set used by the database connection. Note, SQL Server supports UTF-8 only as of SQL Server 2019.\n\nYou can find more details in the [release notes](https://github.com/doctrine/dbal/releases/tag/3.2.0).\n", + "date": "2021-11-26 00:00:00" } ] \ No newline at end of file diff --git a/website-data/projects.json b/website-data/projects.json index 3f2c5ffc8fe3..5fa358745444 100644 --- a/website-data/projects.json +++ b/website-data/projects.json @@ -4210,9 +4210,9 @@ "dependents": 2326, "suggesters": 75, "downloads": { - "total": 389024026, - "monthly": 5691611, - "daily": 325460 + "total": 389220314, + "monthly": 5790511, + "daily": 285432 }, "favers": 6760 } @@ -9645,19 +9645,19 @@ }, "type": "library", "repository": "https://github.com/doctrine/cache", - "github_stars": 7754, + "github_stars": 7756, "github_watchers": 45, - "github_forks": 221, + "github_forks": 220, "github_open_issues": 2, "language": "PHP", "dependents": 1186, "suggesters": 138, "downloads": { - "total": 417286123, - "monthly": 6597726, - "daily": 321785 + "total": 417799307, + "monthly": 6984013, + "daily": 367243 }, - "favers": 7830 + "favers": 7832 } } }, @@ -12407,9 +12407,9 @@ "dependents": 701, "suggesters": 0, "downloads": { - "total": 6624556, - "monthly": 167433, - "daily": 7067 + "total": 6632746, + "monthly": 173415, + "daily": 8274 }, "favers": 309 } @@ -15372,9 +15372,9 @@ "dependents": 1031, "suggesters": 13, "downloads": { - "total": 280100972, - "monthly": 3921923, - "daily": 204495 + "total": 280239397, + "monthly": 3999791, + "daily": 169343 }, "favers": 5839 } @@ -22780,9 +22780,9 @@ "dependents": 1389, "suggesters": 35, "downloads": { - "total": 258725832, - "monthly": 3578932, - "daily": 181824 + "total": 258744330, + "monthly": 3597430, + "daily": 150482 }, "favers": 5774 } @@ -23400,9 +23400,9 @@ "dependents": 39, "suggesters": 18, "downloads": { - "total": 718238, - "monthly": 4704, - "daily": 202 + "total": 718312, + "monthly": 4778, + "daily": 159 }, "favers": 126 } @@ -23680,8 +23680,8 @@ "dependents": 8, "suggesters": 3, "downloads": { - "total": 65225, - "monthly": 200, + "total": 65237, + "monthly": 212, "daily": 13 }, "favers": 152 @@ -27044,9 +27044,9 @@ "dependents": 466, "suggesters": 42, "downloads": { - "total": 88100285, - "monthly": 1337353, - "daily": 64160 + "total": 88181728, + "monthly": 1397419, + "daily": 63727 }, "favers": 2754 } @@ -40420,12 +40420,12 @@ "github_forks": 1290, "github_open_issues": 216, "language": "PHP", - "dependents": 5356, + "dependents": 5359, "suggesters": 210, "downloads": { - "total": 373656333, - "monthly": 6250860, - "daily": 320353 + "total": 373976334, + "monthly": 6448157, + "daily": 291833 }, "favers": 9384 } @@ -41646,9 +41646,9 @@ "dependents": 92, "suggesters": 1, "downloads": { - "total": 301989932, - "monthly": 6664267, - "daily": 371464 + "total": 302135033, + "monthly": 6686515, + "daily": 292328 }, "favers": 5839 } @@ -44352,12 +44352,12 @@ "github_forks": 128, "github_open_issues": 19, "language": "PHP", - "dependents": 748, + "dependents": 747, "suggesters": 12, "downloads": { - "total": 550857077, - "monthly": 9350613, - "daily": 468504 + "total": 551307900, + "monthly": 9615094, + "daily": 453760 }, "favers": 11193 } @@ -46073,9 +46073,9 @@ "dependents": 342, "suggesters": 1, "downloads": { - "total": 606228958, - "monthly": 8109501, - "daily": 378806 + "total": 606645800, + "monthly": 8366312, + "daily": 348094 }, "favers": 10913 } @@ -47639,12 +47639,12 @@ "github_forks": 55, "github_open_issues": 2, "language": "PHP", - "dependents": 88, + "dependents": 89, "suggesters": 1, "downloads": { - "total": 576737215, - "monthly": 10053119, - "daily": 520783 + "total": 577238951, + "monthly": 10086489, + "daily": 476775 }, "favers": 10991 } @@ -57231,12 +57231,12 @@ "github_forks": 388, "github_open_issues": 106, "language": "PHP", - "dependents": 449, + "dependents": 451, "suggesters": 36, "downloads": { - "total": 127671075, - "monthly": 2176487, - "daily": 104798 + "total": 127898149, + "monthly": 2320128, + "daily": 118435 }, "favers": 4648 } @@ -57877,13 +57877,13 @@ "source": { "url": "https://github.com/doctrine/mongodb-odm.git", "type": "git", - "reference": "d6881615d09475613b76ec27a6bf9f9b12277787" + "reference": "c49d55a8ea5f96c19c0950485e2fd959ffe9efca" }, "dist": { - "url": "https://api.github.com/repos/doctrine/mongodb-odm/zipball/d6881615d09475613b76ec27a6bf9f9b12277787", + "url": "https://api.github.com/repos/doctrine/mongodb-odm/zipball/c49d55a8ea5f96c19c0950485e2fd959ffe9efca", "type": "zip", "shasum": "", - "reference": "d6881615d09475613b76ec27a6bf9f9b12277787" + "reference": "c49d55a8ea5f96c19c0950485e2fd959ffe9efca" }, "type": "library", "funding": [ @@ -57900,7 +57900,7 @@ "type": "tidelift" } ], - "time": "2024-01-19T14:33:13+00:00", + "time": "2024-01-23T10:51:48+00:00", "autoload": { "psr-4": { "Doctrine\\ODM\\MongoDB\\": "lib/Doctrine/ODM/MongoDB" @@ -67152,14 +67152,14 @@ "github_stars": 1076, "github_watchers": 50, "github_forks": 540, - "github_open_issues": 102, + "github_open_issues": 101, "language": "PHP", "dependents": 327, "suggesters": 102, "downloads": { - "total": 14621105, - "monthly": 246565, - "daily": 10956 + "total": 14635524, + "monthly": 255793, + "daily": 11576 }, "favers": 1087 } @@ -82543,9 +82543,9 @@ "dependents": 6380, "suggesters": 429, "downloads": { - "total": 185700998, - "monthly": 2997081, - "daily": 168100 + "total": 185849715, + "monthly": 3096423, + "daily": 162757 }, "favers": 9931 } @@ -88758,9 +88758,9 @@ "dependents": 431, "suggesters": 6, "downloads": { - "total": 164559577, - "monthly": 3508137, - "daily": 183232 + "total": 164662169, + "monthly": 3554899, + "daily": 151493 }, "favers": 3867 } @@ -95341,9 +95341,9 @@ "dependents": 112, "suggesters": 33, "downloads": { - "total": 1272089, - "monthly": 5254, - "daily": 126 + "total": 1272313, + "monthly": 5461, + "daily": 191 }, "favers": 177 } @@ -96285,9 +96285,9 @@ "dependents": 3, "suggesters": 0, "downloads": { - "total": 92796502, - "monthly": 751497, - "daily": 39173 + "total": 92803989, + "monthly": 758984, + "daily": 33676 }, "favers": 2970 } @@ -98871,9 +98871,9 @@ "dependents": 12, "suggesters": 0, "downloads": { - "total": 136844, - "monthly": 2945, - "daily": 195 + "total": 136949, + "monthly": 2909, + "daily": 106 }, "favers": 59 } @@ -99471,7 +99471,7 @@ "downloads": { "total": 7334, "monthly": 183, - "daily": 3 + "daily": 1 }, "favers": 103 } @@ -114116,12 +114116,12 @@ "github_forks": 442, "github_open_issues": 10, "language": "PHP", - "dependents": 3409, + "dependents": 3410, "suggesters": 210, "downloads": { - "total": 157472249, - "monthly": 2474674, - "daily": 150641 + "total": 157607612, + "monthly": 2570580, + "daily": 143730 }, "favers": 4660 } @@ -116136,9 +116136,9 @@ "dependents": 344, "suggesters": 14, "downloads": { - "total": 77345124, - "monthly": 282847, - "daily": 15799 + "total": 77355605, + "monthly": 293328, + "daily": 16952 }, "favers": 2789 } @@ -120565,9 +120565,9 @@ "dependents": 490, "suggesters": 29, "downloads": { - "total": 110709723, - "monthly": 1975085, - "daily": 123042 + "total": 110820538, + "monthly": 2055140, + "daily": 117494 }, "favers": 4159 } @@ -127503,9 +127503,9 @@ "dependents": 221, "suggesters": 128, "downloads": { - "total": 11936370, - "monthly": 186797, - "daily": 12327 + "total": 11946191, + "monthly": 192815, + "daily": 11160 }, "favers": 383 } @@ -138822,9 +138822,9 @@ "dependents": 157, "suggesters": 10, "downloads": { - "total": 6095179, - "monthly": 63390, - "daily": 3941 + "total": 6097856, + "monthly": 65063, + "daily": 3647 }, "favers": 401 } @@ -149161,9 +149161,9 @@ "dependents": 436, "suggesters": 40, "downloads": { - "total": 5635586, - "monthly": 57470, - "daily": 3251 + "total": 5637414, + "monthly": 59298, + "daily": 3215 }, "favers": 445 } @@ -155678,9 +155678,9 @@ "dependents": 37, "suggesters": 11, "downloads": { - "total": 563935, - "monthly": 3486, - "daily": 171 + "total": 564069, + "monthly": 3620, + "daily": 154 }, "favers": 88 } @@ -157737,9 +157737,9 @@ "dependents": 18, "suggesters": 1, "downloads": { - "total": 1192371, - "monthly": 41859, - "daily": 2087 + "total": 1194510, + "monthly": 43998, + "daily": 2404 }, "favers": 32 }