在 DQL 中使用 ArrayCollection() class 的 contain()
Use contain() of ArrayCollection() class in DQL
我有这个脚本。
它从数据库中获取行并选择属于类别 (CatData) 的行。
getCatDatas()
returns \Doctrine\Common\Collections\ArrayCollection()
class.
所以可以用contain()
来检查。
不过我想把这个方法放到DQL里面,请问有实践吗??
$result = array();
$articles = $em->createQuery("SELECT a FROM DefaultBundle:ArticleData a ")
->getResult();
foreach ($articles as $a){// I want to put this function in DQL.
if ($a->getCatDatas()->contain($cat)){
array_push($articles,$result);
}
}
是的,您可以使用 DQL 并对关系执行 where 条件。
您可以在此处找到更多信息:https://symfonycasts.com/screencast/symfony3-doctrine-relations/relation-query
特别是 GenusNoteRepository
中的方法 findAllRecentNotesForGenus
。
我认为你可以做类似的事情:
public function findPostsByCategoryData(CategoryData $cat)
{
return $this->createQueryBuilder('a')
->andWhere('a.catDatas = :cat')
->setParameter('cat', $cat)
->getQuery()
->execute();
}
@Alessandro Filira 开始的方向是正确的,但忘了考虑这是一个您要过滤的对多关系。
Doctrine 支持 MEMBER OF
运算符,其工作方式有点像 IN
但方向相反。它允许您检查您拥有的特定值是否作为相关组中的元素找到。
所以代码应该是这样的:
public function findPostsByCategoryData(CategoryData $cat): array
{
return $this->createQueryBuilder('a')
->andWhere(':cat MEMBER OF a.catDatas')
->setParameter('cat', $cat)
->getQuery()
->getResult();
}
有关 MEMBER OF 用法,请参阅 Doctrine 文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/dql-doctrine-query-language.html(使用 Ctrl+F 和 "member of")
我有这个脚本。
它从数据库中获取行并选择属于类别 (CatData) 的行。
getCatDatas()
returns \Doctrine\Common\Collections\ArrayCollection()
class.
所以可以用contain()
来检查。
不过我想把这个方法放到DQL里面,请问有实践吗??
$result = array();
$articles = $em->createQuery("SELECT a FROM DefaultBundle:ArticleData a ")
->getResult();
foreach ($articles as $a){// I want to put this function in DQL.
if ($a->getCatDatas()->contain($cat)){
array_push($articles,$result);
}
}
是的,您可以使用 DQL 并对关系执行 where 条件。
您可以在此处找到更多信息:https://symfonycasts.com/screencast/symfony3-doctrine-relations/relation-query
特别是 GenusNoteRepository
中的方法 findAllRecentNotesForGenus
。
我认为你可以做类似的事情:
public function findPostsByCategoryData(CategoryData $cat)
{
return $this->createQueryBuilder('a')
->andWhere('a.catDatas = :cat')
->setParameter('cat', $cat)
->getQuery()
->execute();
}
@Alessandro Filira 开始的方向是正确的,但忘了考虑这是一个您要过滤的对多关系。
Doctrine 支持 MEMBER OF
运算符,其工作方式有点像 IN
但方向相反。它允许您检查您拥有的特定值是否作为相关组中的元素找到。
所以代码应该是这样的:
public function findPostsByCategoryData(CategoryData $cat): array
{
return $this->createQueryBuilder('a')
->andWhere(':cat MEMBER OF a.catDatas')
->setParameter('cat', $cat)
->getQuery()
->getResult();
}
有关 MEMBER OF 用法,请参阅 Doctrine 文档:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/dql-doctrine-query-language.html(使用 Ctrl+F 和 "member of")