繁体   English   中英

Symfony 2:教义一对多关系

[英]Symfony 2 : Doctrine OneToMany relation

我有2个实体:

class Client
{
    /**
     * @var integer $mainId
     *
     * @ORM\Column(name="main_id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $mainId;

    /**
     * @var string $id
     * 
     * @ORM\Column(name="id", type="string", length=10, nullable=false, unique=true)
     */
    private $id;

    ...
}

class Child
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Client
     *
     * @ORM\ManyToOne(targetEntity="Client")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="client_id", referencedColumnName="id")
     * })
     */
    private $clientId;

    ....
}

出于某种原因,子表中的外键没有指向Client表的主键,但是无论如何我都不认为这应该是一个问题。

当我尝试在控制器中执行以下操作时:

$ child-> set ...
$ child-> setClientId($ client);
$ em-> persist($ child);

我收到以下错误:

Notice: Undefined index: id in C:\wamp\www\myApp\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 510 

我试图在我的客户表中添加@Index注释,但仍然出现错误...

我以前从未遇到过这个问题,欢迎任何帮助。

编辑

如果将Client类中的“ @ORM \\ Id”注释从$ mainId移至$ id,则可以。 这是否意味着Doctrine 2不允许指向“非主键”字段的外键?

referencedColumnName应该设置为设置了@ORM\\Id的列,因此在您的情况下, referencedColumnName="main_id"应该可以工作

(不要忘记更改这些设置后清除缓存并运行doctrine:schema:update --force

您为什么不简单地在数据库中设计所有内容,包括外键,等等……并在此处使用基于数据库的实体来创建实体?

http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html

对我来说效果很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM