我正在构建Symfony 2应用程序,因此使用ORM原则。所以一切都很顺利,除了一个引用永远都是空的,我不知道为什么。这就是我所拥有的:
集团实体:
class Group {
...
/**
*
* @ORM'ManyToOne(targetEntity="Test")
* @ORM'JoinColumn(name="test", referencedColumnName="id")
*
*/
private $test;
/**
*
* @ORM'OneToMany(targetEntity="Participant", mappedBy="group")
*
*/
private $participants;
}
参与者实体:
class Participant {
...
/**
*
* @ORM'ManyToOne(targetEntity="Group", inversedBy="participants")
* @ORM'JoinColumn(name="`group`", referencedColumnName="id", onDelete="CASCADE")
*
*/
private $group;
}
所以我有以下关系:
测试(1)<->(N) 组(1)<->(N) 参与者
问题:
- 当对参与者实体的对象调用getGroup()时,我得到的返回值为null
- 当对组实体的对象调用getTest()时,我得到了正确的测试对象
- 当对group对象调用getParticipants时,我会得到所有参与者的集合
那么为什么是1。不工作和2。即使两者都是同一种关系?
调试时更奇怪的是:
Debug::dump($participant);
导致:
object(stdClass)[406] public '__CLASS__' => string 'GroupBundle'Entity'Participant' (length=52)
public 'id' => int 1
public 'firstname' => string 'xxx' (length=4)
public 'lastname' => string 'xxx' (length=7)
public 'email' => string 'xxx' (length=19)
public 'auth_token' => string 'xxx' (length=43)
public 'group' => null
但是
Debug::dump($group);
Debug::dump($participant);
导致:
object(stdClass)[406] public '__CLASS__' => string 'GroupBundle'Entity'Participant' (length=52)
public 'id' => int 1
public 'firstname' => string 'xxx' (length=4)
public 'lastname' => string 'xxx' (length=7)
public 'email' => string 'xxx' (length=19)
public 'auth_token' => string 'xxx' (length=43)
public 'group' => object(stdClass)[412] public '__CLASS__' => string 'GroupBundle'Entity'Group' (length=46)
public 'id' => int 1
public 'name' => string 'xxx' (length=4)
public 'description' => string 'xxx' (length=4)
public 'status' => int 0
public 'test' => string 'Proxies'__CG__'TestBundle'Entity'Test' (length=59)
public 'participants' => string 'Array(5)' (length=8)
所以突然间它就在那里。谢谢你的想法。希望你能帮助我。
在中使用回溯报价
@ORM'JoinColumn(name="`group`", referencedColumnName="id", onDelete="CASCADE")
^ ^
联接列不支持。我假设您使用的DBMS将GROUP
作为保留字,这就是您使用backticks的原因。尝试按如下方式更改联接列:
@ORM'JoinColumn(name="group_id", referencedColumnName="id", onDelete="CASCADE")