gpt4 book ai didi

php - 带有可空/可选连接的 Doctrine 查询

转载 作者:行者123 更新时间:2023-12-03 18:46:06 24 4
gpt4 key购买 nike

我在我的存储库类上有一个方法让我 Article 有他们的加入(类别,图像......)而不是每个 Article 都有类别或图像,什么不要给我返回所有预期的结果,因为我当前的存储库函数只返回 ArticleCategoriesImage 不为空,只是忽略什么具有空值。

我的 Article 实体具有以下关系。

 /**
* @ORM\ManyToMany(targetEntity="App\ArticleBundle\Entity\Category", cascade={"persist"})
*/
private $categories;

/**
* @ORM\ManyToOne(targetEntity="App\ArticleBundle\Entity\Image", cascade={"persist"})
*
*/
private $image;

这是我的存储库函数

public function getArticle($id)
{
$qb = $this->createQueryBuilder('a')
->where('a.id = :theId')
->setParameter('theId', $id)
->join('a.author', 'auth')
->addSelect('auth')
->join('a.categories', 'cat')
->addSelect('cat')
->join('a.image', 'img')
->addSelect('img');

return $qb->getQuery()->getOneOrNullResult();
}

现在我想知道是否可以通过连接在一个查询中获得具有类别图像Article。我想说的是,当使用 Doctrine 延迟加载(通过避免查询中的连接)时,我得到了预期的结果。

最佳答案

使用->leftJoin()在一次查询中得到Articlecategories,image或没有的Article :

public function getArticle($id)
{
$qb = $this
->createQueryBuilder('a')
->addSelect('auth', 'cat', 'img')
->join('a.author', 'auth')
->leftJoin('a.categories', 'cat')
->leftJoin('a.image', 'img')
->where('a.id = :theId')
->setParameter('theId', $id)
;

return $qb->getQuery()->getOneOrNullResult();
}

因此,当 Doctrine 尝试以惰性方式加载相关属性时,避免了额外的查询。

解释:

使用->join()->innerJoin():

enter image description here

This is the simplest, most understood Join and is the most common. This query will return all of the records in the left table (table A) that have a matching record in the right table (table B).

使用 ->leftJoin():

enter image description here

This query will return all of the records in the left table (table A) regardless if any of those records have a match in the right table (table B). It will also return any matching records from the right table.

来源: Visual-Representation-of-SQL-Joins C.L. Moffatt 详细解释

关于php - 带有可空/可选连接的 Doctrine 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45756622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com