【问题标题】:Doctrine returns null object on JOIN selectDoctrine 在 JOIN 选择时返回空对象
【发布时间】:2015-05-08 16:16:43
【问题描述】:

我的 symfony 类库中有这个功能:

public function findAllByIdShop($id)
{
    return $this->getEntityManager()
        ->createQuery(
            'SELECT s, c
            FROM  AppBundle:ShopCategory s
            JOIN  s.category c
            WHERE s.shop = :shop_id
            ORDER BY c.name'
        )
        ->setParameter(':shop_id', $id)
        ->getResult();
}

查询将最后一个记录类别(别名 c)作为 NULL 值返回,如果我通过“SELECT s”更改选择行,我将通过教义延迟加载获得正确的结果,并且我想避免延迟加载。

例如,如果我在存储库查询中有四个名为“c1、c2、c3、c4”的类别,我将 c4 获取为 null。

我的班级看起来像那样(请注意,我使用多对一、单向关系来避免双向关系)

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * ShopCategory
 *
 * @ORM\Table()
 * @ORM\Entity
  */
class ShopCategory
{


    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Shop")
     */
    private $Shop;


    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Category")
     */

    private $Category;


    /**
     * Set Shop
     *
     * @param AppBundle\Entity\Shop $Shop
     * @return ShopCategory
     */
    public function setShop(\AppBundle\Entity\Shop $Shop)
    {
    $this->Shop = $Shop;

    return $this;
    }

    /**
     * Get Shop
     *
     * @return AppBundle\Entity\Shop
     */
    public function getShop()
    {
    return $this->Shop;
    }

    /**
     * Set Category
     *
     * @param AppBundle\Entity\Category $Category
     * @return ShopCategory
     */
    public function setCategory(\AppBundle\Entity\Category $Category)
    {
    $this->Category = $Category;

    return $this;
    }

    /**
     * Get Category
     *
     * @return AppBundle\Entity\Category 
     */
    public function getCategory()
    {
    return $this->Category;
    }
}

【问题讨论】:

    标签: php mysql symfony doctrine-orm doctrine


    【解决方案1】:

    试试这个

     public function findAllByIdShop($id)
        {
            return $this->getEntityManager()
                ->createQuery(
                    'SELECT s, c
                    FROM  AppBundle:ShopCategory sc
                    JOIN  sc.category c
                    JOIN  sc.shop s
                    WHERE s.<id_field> = :shop_id
                    ORDER BY c.name'
                )
                ->setParameter(':shop_id', $id)
                ->getResult();
        }
    

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-08
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多