我有一个产品实体,其中具有一个数组作为属性:
/**
* @ORM\OneToMany(targetEntity="Shopious\MainBundle\Entity\ProductPicture", mappedBy="product", cascade={"persist","remove"})
*/
protected $pictures;
/**
* @Accessor(getter="getCover")
*/
private $cover;
public function getCover()
{
if($this->pictures->count() > 0) {
return $this->pictures[0];
}
return new ProductPicture();
}
现在在我的查询生成器中,我有以下代码:
$query = $em->createQueryBuilder()->select('p')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
;
这里的问题是我不想选择所有p的属性。因此,我只想在pictures数组中获得第一个ProductPicture(在我上面的例子中,它类似于getCover()方法)。我该怎么做呢?
到目前为止,我可以通过执行以下操作来过滤掉我想要的部分属性:
$query = $em->createQueryBuilder()->select('p.name, p.id')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
->innerJoin('p.pictures', 'pictures')
;
因此,在上面的示例中,我对图片进行了内部连接,但是如何从此处获取第一个元素?
总之,我的问题是如何使用查询生成器选择/查询图片数组中的第一个ProductPicture?因为当我这样做时:
$ query = $ em-> createQueryBuilder()-> select(’p’)
它返回整个产品属性,但我不希望整个产品属性。我只想要其中的一些属性,例如id,name等。但是,其中一个产品属性实际上是一个实体(即ProductPicture
),那么如何在select语句中返回呢?
编辑:
这是一个等效于图片的SQL等效SQL:
SELECT *
FROM `product`
JOIN `product_picture` ON `product`.id = `product_picture`.product_id
WHERE `product`.id =100
LIMIT 1
尝试这样的操作,如果它是一对多的,则正常的mySQL行为是返回带有冗余产品数据的多条记录,如果在这种情况下发生相同的情况,那么仅返回第一条记录就可以解决问题。
PS : 假设ProductPicture实体具有您要获取的url属性
$query = $em->createQueryBuilder()->select('p.id, p.name, pictures.url')
->from("SiteMainBundle:Product", 'p')
->innerJoin('p.category', 'c')
->innerJoin('p.shop', 'shop')
->innerJoin('p.pictures', 'pictures')
;
问题内容: 在Symfony2学说查询生成器中如何实现SQL?假设我有这个查询: 我有这个DQL: 现在如何添加IFNULL部分? 问题答案: 好的,做了一些研究,发现没有这样的实现。 谷歌搜索更多,并得到这种缺失的功能可以作为自己的功能添加到Doctrine。 我在GitHub上找到了这个扩展名,我认为这会起作用。但是想知道与教义版本是否会有任何问题或冲突…
我有一个学生表学生(LRN,名字,名字,级别ID)和一个成绩表成绩(科目ID,年级,级别ID,LRN,时间添加)我想显示所有学生的所有科目的成绩在网上。我厌倦了这个查询,但我得到了这个结果。 结果:查询结果
问题内容: 我有一个由一些条件创建的复杂查询,我想从将要执行的构建器对象中获取最终的SQL查询。我可以那样做吗? 问题答案: 您可以执行以下操作: 但是Laravel不会在查询中向您显示参数,因为它们是在准备查询后绑定的。 因此,您也可以执行以下操作:
有几种不同方法可以生成查询结果: 结果数组 结果行 自定义结果对象 结果辅助方法 Class Reference 结果数组 result() 方法 该方法以**对象数组**形式返回查询结果,如果查询失败返回**空数组**。 一般情况下,你会像下面这样在一个 foreach 循环中使用它: $query = $this->db->query("YOUR QUERY"); foreach ($que
问题内容: 如果我的查询包含一个类,例如: 然后我迭代它,那里是一个类的对象。 那么如何从包含多个类的查询中获取结果呢?例如: 问题答案: for (Object[] result : query.list()) { User user = (User) result[0]; Group group = (Group) result[1]; }
我有一个问题,使laravel查询: 我想举个例子: 我有这个但不起作用: