0

我有一个实体,其中包含与另一个实体的 OneToOne 关系:

/**
 * @ORM\Entity
 * @ORM\Table(name="tb_promocao")
 */
class Promocao {
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $codigo;

       /**
     * @ORM\OneToOne(targetEntity="Application\Model\Produto\Produto")
     * @ORM\JoinColumn(name="cod_produto", referencedColumnName="codigo")
     */
    private $produto;
}

/**
 * @ORM\Entity
 * @ORM\Table(name="tb_produto")
 */
class Produto {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $codigo;

        (...)

}

问题是,当我尝试在 Promocao 中提供 fetch 实体时,属性 $produto 未正确填充 Produto 实体。

Produto 实体未正确映射到接收关系的属性上。

对象:EntityProxy__CG__\Application\Model\Produto\Produto

4

1 回答 1

1

这是正常操作。您加入的模型是延迟加载的,因此当您不调用它时,您将只有一个代理。

您可以修改加载连接模型的类型,将其设置为 EAGER 模式:

@ORM\OneToOne(targetEntity="Application\Model\Produto\Produto")
@ORM\JoinColumn(name="cod_produto", referencedColumnName="codigo", **fetch='EAGER'**)

但这里并不是真的推荐,除非你每次都需要这个连接数据。

检查Doctrine文档,对此有很多精确度。

希望这可以帮助。

于 2012-12-23T13:12:57.327 回答