我的 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”更改选择行,我将通过延迟加载 Doctrine 获得正确的结果,我想避免延迟加载。
例如,如果我在存储库查询中有四个名为“c1、c2、c3、c4”的类别,我将获得 null 的 c4。
我的类看起来像那样(请注意,我使用多对一、单向关系来避免双向关系)
<?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;
}
}
最佳答案
试试这个
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();
}
关于php - Doctrine 在 JOIN 选择上返回空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128425/