Doctrine2 findBy objet relation déclencheurs erreur de conversion de chaîne

StackOverflow https://stackoverflow.com/questions/4619071

  •  30-09-2019
  •  | 
  •  

Question

Dire que j'ai deux entités Doctrine2 qui sont liés les uns aux autres, Modèles \ utilisateur et Commentaire de modèles. Si je le fais dans Doctrine 2.0.0 ...

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

... Je reçois une erreur de PHP:

  

Gravité: avis

     

Message: Objet de modèles de classe \ User à la conversion de chaîne

     

Nom du fichier: DBAL / connection.php

     

Numéro de ligne: 574

Cela ne devrait pas arriver, non? Si j'utilise le QueryBuilder et setParameter ( 'user', $ utilisateur), il fonctionne comme prévu.

Était-ce utile?

La solution

Requête par relation est permis, mais vous devez passer l'identifiant là-dedans. Requête par objet n'a pas encore été pris en charge et ne le faire en 2.1.

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

Autres conseils

Malheureusement, je ne pense pas que la requête par des relations est pris en charge directement par les objets du référentiel.

Dans ce cas, vous êtes probablement préférable d'écrire une classe de référentiel personnalisé avec une méthode 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
    }

}

Ne pas oublier de mettre à jour votre entité Commentaire d'utiliser le référentiel personnalisé:

<?php

namespace App\Domain\Entity;


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

    // entity definition

}

Pour symfony 4.1 ce code a fonctionné pour moi.

$comments = $this->getDoctrine()
                ->getRepository(Models\Comment::class)
                ->findBy(
                ['user' => $user->getId(), 'public' => true]
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top