【问题标题】:Doctrine does not map correctly relations教义没有正确映射关系
【发布时间】:2012-12-23 09:40:31
【问题描述】:

我的实体包含与另一个实体的 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

【问题讨论】:

  • 尝试运行架构检查./vendor/bin/doctrine-module orm:validate-schema

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


【解决方案1】:

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

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

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

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

检查 Doctrine 文档,这方面有很多精确度。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2020-01-08
    • 2018-05-09
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    相关资源
    最近更新 更多