Doctrine - how to check if collection contains object

I have two objects User

and Article

with a many-to-many relationship, since I Article

can have many authors.

class User
{
    /** @var string */
    public $name;

    /** @var Collection<Article> */
    public $articles;
}

class Article
{
    /** @var string */
    public $title;

    /** @var Collection<User> */
    public $authors;
}

      

How can I find all articles with a specified (co) author using DQL?

+3


source to share


1 answer


Use an expression MEMBER OF

.

Your DQL Query May Like

SELECT art FROM Article art WHERE :user MEMBER OF art.authors

      

or using the query builder

$queryBuilder = $repository->createQueryBuilder("art");
$queryBuilder->where(":user MEMBER OF art.authors");

      




Alternatively you can join and filter the collection

SELECT art FROM Article art JOIN art.authors aut WHERE aut = :user

      

or

$queryBuilder = $repository->createQueryBuilder("art");
$queryBuilder->join("art.authors", "aut");
$queryBuilder->where("aut = :user");

      

+4


source







All Articles