学说没有正确地映射关系

时间:2012-12-23 09:40:31

标签: zend-framework doctrine doctrine-orm zend-framework2

我有一个实体,其中包含与另一个实体的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中提供获取实体时,属性$ produto未正确填充Produto实体。

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

  

对象:EntityProxy__CG __ \ Application \ Model \ Produto \ Produto

1 个答案:

答案 0 :(得分:1)

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

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

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

但是,除非你每次都需要这些联合数据,否则这里并没有真正推荐。

检查Doctrine文档,对此有很多准确性。

希望这有帮助。