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允许,无论如何,谢谢