Reputation: 362
Say I have two entities in Doctrine2 that are related to each other, Models\User and Models\Comment. If I do this in Doctrine 2.0.0...
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user, 'public' => true));
...I get a PHP error:
Severity: Notice
Message: Object of class Models\User to string conversion
Filename: DBAL/Connection.php
Line Number: 574
This shouldn't happen, right? If I use the QueryBuilder and setParameter('user', $user) it works as expected.
Upvotes: 23
Views: 33784
Reputation: 5632
For symfony 4.1 this code worked for me.
$comments = $this->getDoctrine()
->getRepository(Models\Comment::class)
->findBy(
['user' => $user->getId(), 'public' => true]
);
Upvotes: 4
Reputation: 4337
Query by relationship is allowed, but you have to pass the Identifier in there. Query by object is not yet supported and will only make it into 2.1.
<?php
// $em instanceof EntityManager, $user instanceof Models\User
$comments = $em->getRepository('Models\Comment')
->findBy(array('user' => $user->getId(), 'public' => true));
Upvotes: 35
Reputation: 5454
Unfortunately, I don't think query by relationships is supported directly via repository objects.
In this case, you are probably best to write a custom repository class with a findByUser method.
<?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
}
}
Don't forget to update your Comment entity to use the custom repository:
<?php
namespace App\Domain\Entity;
/**
* @Entity(repositoryClass="App\Domain\Repository\CommentRepository")
*/
class Comment
{
// entity definition
}
Upvotes: 0