Symfony的2:学说一对多关系
问题描述:
我有2个实体:Symfony的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;
....
}
出于某种原因,从子表的外键不指向客户表的主键,但无论如何,我不我认为这应该是一个问题。
当我尝试做以下动作在我的控制器:
$儿童安全>设置...
$儿童安全> SETCLIENTID($客户端);
$ em-> persist($ child);
我得到以下错误:
Notice: Undefined index: id in C:\wamp\www\myApp\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 510
我尝试添加@index anntotation在我的客户表,但我仍然得到错误...
我从来没有过这样的问题,任何帮助将受到欢迎。
编辑
如果我提出从$ mainId至$ ID的 “@ORM \ ID” 的注释在我的客户端类的作品。这是否意味着Doctrine 2不允许指向'非主键'字段的外键?
答
为什么不列你是否简单地设计了你的数据库中的所有东西,包括外键,等等......并且简单地在这里使用这个数据库创建你的实体?
http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
完全为我工作。
答
referencedColumnName
应设置为具有@ORM\Id
集,所以你的情况应该referencedColumnName="main_id"
工作
(不要忘记清除缓存和运行doctrine:schema:update --force
您更改这些设置后)
客户端类中'main_id'和'id'的区别是什么?你为什么不''参考列名=“main_id”'? – meze 2011-12-30 10:04:29
是的,我知道它很奇怪,但表是这样做的,我现在不能改变它(实际上id是一个字符串,mainId是一个自动递增的整数)......看我的编辑并告诉我你的想法。 – Yoot 2011-12-30 10:08:13
当然你不能创建一个没有主键的关系...... – meze 2011-12-30 10:25:08