提取EAGER无法与二级关系一起使用

时间:2018-09-28 09:36:06

标签: doctrine-orm soft-delete

只是一个例子:

/**
 * @ORM\Entity
 */
class Menu
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\OneToMany(targetEntity="MenuDish", mappedBy="menu", fetch="EAGER")
     */
    private $menu_dishes;

    public function __construct()
    {
        $this->menu_dishes = new ArrayCollection();
    }
}

/**
 * @ORM\Entity
 */
class MenuDish
{
    /**
     * @ORM\ManyToOne(targetEntity="Dish", inversedBy="menu_dishes", fetch="EAGER")
     */
    private $dish;
}

然后我尝试获取菜单:

$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository(Menu::class);
$menu = $repo->find(1);

然后我查看XDebug,发现Menu :: $ menu_dishes是实体集合(不是代理),一切正常,EAGER在工作。 但是菜单:: $ menu_dishes :: $ dish包含代理!有错误吗? $ dish标有fetch = EAGER。 当我将某些属性标记为FETCH = EAGER时,我希望该属性将不包含Proxy类。 我需要用它来与SoftDelete对抗,真正的问题是$ dish实际上已被软删除,并且渴望将$ dish设置为null来修复它,但它不起作用。 如何让EAGER处理菜品?

0 个答案:

没有答案