Doctrine - 如何检查集合是否包含实体

mle*_*eko 4 dql doctrine-orm

我有两个实体User并且Article具有多对多的关系,因为Article可以有很多作者.

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

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

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

    /** @var Collection<User> */
    public $authors;
}
Run Code Online (Sandbox Code Playgroud)

如何使用DQL查找指定(共)作者的所有文章?

mle*_*eko 10

使用MEMBER OF表达式.

你的DQL查询就像

SELECT art FROM Article art WHERE :user MEMBER OF art.authors
Run Code Online (Sandbox Code Playgroud)

或使用查询构建器

$queryBuilder = $repository->createQueryBuilder("art");
$queryBuilder->where(":user MEMBER OF art.authors");
Run Code Online (Sandbox Code Playgroud)

或者,您可以加入并过滤收集

SELECT art FROM Article art JOIN art.authors aut WHERE aut = :user
Run Code Online (Sandbox Code Playgroud)

要么

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