php - 如何从 Doctrine 查询生成器中获取部分结果

标签 php sql symfony doctrine query-builder

我有一个产品实体,其中有一个数组作为属性:

     /**
     * @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 的所有属性。所以我只想获取图片数组中的第一个 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、名称等。但是其中一个产品属性实际上是一个实体(是 ProductPicture),那么如何在 select 语句中返回它呢?

编辑:

下面是一个关于图片应该如何内部连接的 SQL 等价物:

SELECT * 
FROM  `product` 
JOIN  `product_picture` ON  `product`.id =  `product_picture`.product_id
WHERE  `product`.id =100
LIMIT 1

最佳答案

尝试这样的事情,如果是一对多,正常的 mySQL 行为是返回几 strip 有冗余产品数据的记录,如果这里发生同样的情况,那么只返回第一条记录就可以了。

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')
            ;

关于php - 如何从 Doctrine 查询生成器中获取部分结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16994576/

相关文章:

php - 带有 stof 可上传扩展名的 Symfony2 上传文件

php - Doctrine 映射一个不存在的类

php - 二维数组的使用

php - 如何让托管服务器及时运行特定的PHP代码?

mysql - 带有计算字段的 SQL 连接表

sql - 如果找到 USER,则选择最后一行

symfony2 : class included in AppKernel can not be found

php - 摆脱 WooCommerce 我的帐户 - 订单页面中的订单状态

php - 将 Joomla 内容标记为过时但保持可见

php - 如何防止 PHP 中的 SQL 注入(inject)?