Indexing 符号2:一对一关系学说

Indexing 符号2:一对一关系学说,indexing,symfony,doctrine-orm,many-to-one,Indexing,Symfony,Doctrine Orm,Many To One,我有两个实体: class Client { /** * @var integer $mainId * * @ORM\Column(name="main_id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $mainId; /** * @var stri

我有两个实体:

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;

    ....
}
出于某种原因,子表中的外键并不指向客户机表的主键,但无论如何,我认为这不应该是一个问题

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

$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注释,但仍然出现错误

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

编辑


如果我在我的客户机类中将“@ORM\Id”注释从$mainId移动到$Id,那就行了。这是否意味着原则2不允许外键指向“非主键”字段?

referencedColumnName
应设置为设置了
@ORM\Id
的列,因此在您的情况下,
referencedColumnName=“main\u Id”
应起作用


(不要忘记清除缓存并在更改这些设置后运行
原则:模式:更新--force

为什么不简单地设计数据库中的所有内容,包括外键等等…然后在这里使用此选项基于数据库创建实体


对我来说非常有效。

在客户端类中“main_id”和“id”有什么区别?为什么不做
referencedColumnName=“main\u id”
?是的,我知道这很奇怪,但表是这样做的,我现在无法更改它(实际上id是一个字符串,mainId是一个自动递增的整数)。。。查看我的编辑并告诉我您的想法。当然,如果没有主键,您就无法创建关系…这不是很明显,因为mysql允许,无论如何,谢谢