{"id":171,"date":"2017-06-02T14:15:18","date_gmt":"2017-06-02T12:15:18","guid":{"rendered":"http:\/\/carsten.familie-schumann.info\/blog\/?page_id=171"},"modified":"2017-06-02T14:15:18","modified_gmt":"2017-06-02T12:15:18","slug":"junctiontables-in-doctrine","status":"publish","type":"page","link":"https:\/\/carsten.familie-schumann.info\/blog\/junctiontables-in-doctrine\/","title":{"rendered":"JunctionTables in Doctrine"},"content":{"rendered":"<p>Man stelle sich vor, man hat zwei Tabellen: Person und Account. Dazwischen gibt es die klassische Junction-Tabelle: PersonJuncAccount. Soweit l\u00e4sst sich das in Doctrine prima abbilden. Was ist aber, wenn man der JunctionTable mehr als den PrimaryKey sowie die beiden ForeignKeys mitgeben m\u00f6chte, beispielsweise noch die Rechte der Person auf dem Account? Dann ist es nicht mehr einfach m\u00f6glich, per Doctrine-Funktion die Objekte auf der anderen Seite der Junction-Table zu holen. Mit einem kleinen Codeschnipsel kann man aber die L\u00fccke schlie\u00dfen:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n    \/* File: Entity\/Person.php *\/\r\n\r\n    public function getAccounts()\r\n    {\r\n        return new ArrayCollection(array_map(\r\n            function ($j) {\r\n                return $j-&gt;getAccount();\r\n            },\r\n            $this-&gt;getJuncAccounts()-&gt;toArray()\r\n        ));\r\n    }\r\n<\/pre>\n<p>Ein weiteres Problem ist, wenn man eine Assoziation filtern m\u00f6chte. Beispielsweise nach &#8222;nicht ausgelaufenen&#8220; Datens\u00e4tzen. Hier die L\u00f6sung:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n    \/* File: Entity\/Person.php *\/\r\n\r\n    public function getContracts()\r\n    {\r\n      \/\/ see: http:\/\/www.boxuk.com\/blog\/filtering-associations-with-doctrine-2\/\r\n        $criteria = Criteria::create();\r\n        $criteria-&gt;where(Criteria::expr()-&gt;isnull('expiredAt'));\r\n\r\n        return $this-&gt;contracts-&gt;matching($criteria);\r\n    }\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Man stelle sich vor, man hat zwei Tabellen: Person und Account. Dazwischen gibt es die klassische Junction-Tabelle: PersonJuncAccount. Soweit l\u00e4sst sich das in Doctrine prima abbilden. Was ist aber, wenn man der JunctionTable mehr als den PrimaryKey sowie die beiden ForeignKeys mitgeben m\u00f6chte, beispielsweise noch die Rechte der Person auf dem Account? Dann ist es&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/carsten.familie-schumann.info\/blog\/junctiontables-in-doctrine\/\">Mehr Lesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-171","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/comments?post=171"}],"version-history":[{"count":2,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/171\/revisions"}],"predecessor-version":[{"id":305,"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/pages\/171\/revisions\/305"}],"wp:attachment":[{"href":"https:\/\/carsten.familie-schumann.info\/blog\/wp-json\/wp\/v2\/media?parent=171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}