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 to share