Ich versuche, ein gutes Design zu üben und Doctrine zu erweitern. Meine erweiterte Klasse, das Modell im Grunde, wird eine zusätzliche Geschäftslogik + Zugriff auf die Basisdaten der Entität haben.
Ich verwende Doctrine 2.2.1 & amp; Zend Framework 1.11.4 & amp; PHP 5.3.8
Wenn ich DQL verwende, gibt Doktrine erfolgreich die Model-Entität zurück. Wenn ich die native find () - Funktion von Doctrine verwende, gibt es nichts zurück: (.
Hilfe ...
Bootstrap.php :
%Vor%Modell in APPLICATION_PATH \ models \ User.php :
%Vor%Entity Retrieval Funktionen :
FUNKTIONIERT NICHT :
%Vor%FUNKTIONIERT :
%Vor%Sie sollten den Entitäten keine Geschäftslogik hinzufügen, stattdessen sollten Sie dafür Modelle verwenden. Eine Möglichkeit wäre:
In der Praxis bedeutet dies, dass Modelle einfache PHP-Klassen sind (oder vielleicht Framework erweitert, je nachdem, was Sie verwenden), aber Ihre Modelle haben keine Beziehung zu Ihrer Datenbank. Ihre Modelle instanzieren jedoch Ihre benutzerdefinierten Doctrine 2-Repositories. Z.B. a UserRepository
könnte eine Methode namens getUserById
enthalten. In Ihren Repositorys führen Sie Ihre tatsächlichen Abfragen aus und geben Entitätsinstanzen zurück, mit denen die Modelle arbeiten können.
[1] Ссылка
Wie ich Doctrine verstehe, ist entityManager
nur für persistente Entitäten verantwortlich, und das Erweitern von Entities\User
entity mit Model\User
erstellt eine andere Entität (gespeichert in der gleichen Tabelle wie im Docblock angegeben), aber nicht von entityManager
oder in Konflikt damit, weil Sie wahrscheinlich @InheritanceType("SINGLE_TABLE")
in Entities\User
docblocks:
Lesen Sie diese Dokumentation für weitere Informationen Ссылка
Was ich versuchte, war eine schlechte Übung. Ich koppelte meine DB-Entity und Tools von Zend als @Ivan Hušnjak erwähnt.
Was getan werden sollte, ist die Abkopplung.
Geschäftslogik sollte in services \ controller sein und diese sollte die Entität und ihre Methoden adressieren. Sie können der Doktrineinheit Hilfsfunktionen hinzufügen, die nur mit den Entitätseigenschaften in Beziehung stehen.
Was meinen Hauptzweck betrifft (um eine Entity-Klasse zu haben, die die Doctrine CLI überschreiben und aktualisieren kann): Doktrin sucht nur nach Änderungen in den nativen Feldern \ Methoden, aktualisiert sie entsprechend und verwirft alle anderen Funktionen (Helfer). Es gibt also kein Problem, wenn die Doktrin die PHP-Entität aktualisieren lässt!
ps. gehe zu symfony2.
Tags und Links php model-view-controller orm doctrine2