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.

War es hilfreich?

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]
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top