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.

È stato utile?

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]
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top