Doctrine2 findBy Beziehungsobjekts Triggern Zeichenfolge Konvertierungsfehler
-
30-09-2019 - |
Frage
sagen, ich habe zwei Entitäten in Doctrine2, die miteinander, Models \ User und Models \ Kommentar in Zusammenhang stehen. Wenn ich das in Lehre 2.0.0 ...
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
... Ich habe eine PHP-Fehlermeldung erhalten:
Schweregrad: Hinweis
Nachricht: Objekt der Klasse Modelle \ User auf String-Konvertierung
Dateiname: DBAL / Connection.php
Zeilennummer: 574
Das sollte nicht passieren, nicht wahr? Wenn ich die Querybuilder und setParameter ( 'user', $ user) verwenden es funktioniert wie erwartet.
Lösung
Abfrage von Beziehung ist erlaubt, aber Sie haben die Identifier dort passieren. Query by Objekt wird noch nicht unterstützt und wird es nur in 2.1 machen.
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
Andere Tipps
Leider glaube ich nicht Abfrage von Beziehungen über Repository-Objekte direkt unterstützt wird.
In diesem Fall sind Sie wahrscheinlich am besten eine eigene Repository-Klasse mit einer findByUser Methode zu schreiben.
<?php
namespace App\Domain\Repository;
use Doctrine\ORM\EntityRepository,
App\Domain\Entity\User;
class CommentRepository extends EntityRepository
{
public function findByUser(User $user)
{
// add QueryBuilder code here
}
}
Vergessen Sie nicht, Ihren Kommentar Entität zu aktualisieren, um die benutzerdefinierte Repository zu verwenden:
<?php
namespace App\Domain\Entity;
/**
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
*/
class Comment
{
// entity definition
}
Für symfony 4.1 dieser Code für mich gearbeitet.
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);