持久关联symfony2
我开始使用Doctrine2和关联,但我不了解所有方面 我有两个php类:持久关联symfony2,symfony,doctrine-orm,associations,persistence,Symfony,Doctrine Orm,Associations,Persistence,我开始使用Doctrine2和关联,但我不了解所有方面 我有两个php类: class User extends BaseUser { protected $id; protected $team; /** * Get id * * @return integer $id */ public function getId() { return $this->id; } public function setId($id) { $thi
class User extends BaseUser
{
protected $id;
protected $team;
/**
* Get id
*
* @return integer $id
*/
public function getId()
{
return $this->id;
}
public function setId($id) {
$this->id = $id;
}
public function getTeam() {
return $this->team;
}
public function setTeam($team) {
$this->team = $team;
}
}
及
我的问题是,当用户创建新的配置文件时,关联不会被创建
因此,我的用户类中有一个带有PostPersist的函数:
public function addTeam(LifecycleEventArgs $args) {
$entity = $args->getEntity();
$em = $args->getEntityManager();
$player = $this->getTeam();
$player->setPlayers(array($entity));
$em->persist($player);
$em->flush();
}
它可以工作,但只针对一个用户,我的函数在插入查询之前生成一个删除查询
这类问题有解决办法吗
谢谢您的ORM注释中有一些错误:
$coach
和$players
都有一个targetEntity of User和相同的inveredBy属性inversedBy
应该是用户类的属性,用户类是多对多关联的另一方,例如,$coachedTeams
和$playInTeams
addTeam代码删除了以前的关联,因为您调用了$player->setPlayers(array($entity))
:它将旧的关联集合替换为新的关联集合。您应该调用$player->addPlayer($entity),将新对象添加到现有集合中
如果使用php应用程序/控制台原则:generate:entities
生成实体,则不应使用方法setPlayers()
,而应使用addPlayer()
和removePlayer()
还请注意,与条令的关联存储为
条令\Common\Collections\Collection
而非普通数组。菜鸟错误抱歉。。。addPlayer功能当然非常有效!我已经修改了注释,并使用了条令\Common\Collections\Collection。谢谢大家
public function addTeam(LifecycleEventArgs $args) {
$entity = $args->getEntity();
$em = $args->getEntityManager();
$player = $this->getTeam();
$player->setPlayers(array($entity));
$em->persist($player);
$em->flush();
}