Doctrine2 findBy trigger relazione oggettuale errore di conversione stringa
-
30-09-2019 - |
Domanda
Di 'Ho due entità Doctrine2 che sono legati gli uni agli altri, modelli \ User \ e Modelle commento. Se faccio questo in Dottrina 2.0.0 ...
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
... ottengo un errore PHP:
Severity: Avviso
Messaggio: Oggetto dei modelli di classe \ User di conversione di stringa
Nome file: DBAL / Connection.php
Numero linea: 574
Questo non dovrebbe accadere, giusto? Se uso il ( 'user', $ user) QueryBuilder e setParameter funziona come previsto.
Soluzione
Query rapporto è consentito, ma si deve passare l'identificatore in là. Query per oggetto non è ancora supportato e sarà solo in 2.1.
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
Altri suggerimenti
Purtroppo, non credo di query da rapporti è supportato direttamente tramite oggetti di repository.
In questo caso, si sono probabilmente meglio per scrivere una classe repository personalizzata con un metodo findByUser.
<?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
}
}
Non dimenticare di aggiornare il vostro soggetto commento per utilizzare il repository personalizzato:
<?php
namespace App\Domain\Entity;
/**
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
*/
class Comment
{
// entity definition
}
Per symfony 4.1 questo codice ha funzionato per me.
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);