2011-01-06 9 views
17

Dire che in Doctrine2 sono presenti due entità correlate l'una all'altra, Modelli \ Utente e Modelli \ Commento. Se faccio questo in Dottrina 2.0.0 ...Doctrine2 findBy oggetto relazione attiva errore di conversione stringa

<?php 
// $em instanceof EntityManager, $user instanceof Models\User 
$comments = $em->getRepository('Models\Comment') 
    ->findBy(array('user' => $user, 'public' => true)); 

... ottengo un errore di PHP:

Severity: Notice

Message: Object of class Models\User to string conversion

Filename: DBAL/Connection.php

Line Number: 574

Questo non dovrebbe accadere, giusto? Se utilizzo QueryBuilder e setParameter ('utente', $ utente) funziona come previsto.

risposta

30

Query dal rapporto, ma si deve passare l'identificatore in là. Query per oggetto non è ancora supportato e lo renderà solo in 2.1.

<?php 
// $em instanceof EntityManager, $user instanceof Models\User 
$comments = $em->getRepository('Models\Comment') 
->findBy(array('user' => $user->getId(), 'public' => true)); 
+0

@beberlei Ciao, mi chiedevo se questa funzione è ancora nella tabella di marcia (Query per oggetto). Ho provato a guardare Jira senza successo nel trovare qualcosa – calumbrodie

+2

@beberlei: avere ancora questo problema con la dottrina 2.1.6, è normale? – greg0ire

0

Sfortunatamente, non penso che la query per le relazioni sia supportata direttamente tramite gli oggetti repository.

In questo caso, è preferibile scrivere una classe di 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 usare il repository personalizzato: è consentito

<?php 

namespace App\Domain\Entity; 


/** 
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository") 
*/ 
class Comment 
{ 

    // entity definition 

} 
Problemi correlati