Doctrine2 findBy objet relation déclencheurs erreur de conversion de chaîne
-
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.
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]
);