- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的存储库类上有一个方法让我 Article
有他们的加入(类别,图像......)而不是每个 Article
都有类别或图像,什么不要给我返回所有预期的结果,因为我当前的存储库函数只返回 Article
有 Categories
和 Image
不为空,只是忽略什么具有空值。
我的 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()
在一次查询中得到Article
有categories
,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()
:
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()
:
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/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!