Ran*_*ngh 10 php symfony doctrine-orm
我有这个代码
// ONE to many Bidir -- inverse side
/**
* @ORM\OneToMany(targetEntity="Item", mappedBy="Room", cascade={"persist"})
**/
protected $items;
Run Code Online (Sandbox Code Playgroud)
另一边
// ONE to many Bidir-- own side
/**
* @ORM\ManyToOne(targetEntity="Room", inversedBy="items")
* @ORM\JoinColumn(name="room_id", referencedColumnName="id")
**/
protected $room;
Run Code Online (Sandbox Code Playgroud)
我的问题是,我去项目页面,我选择房间,然后我可以在房间页面看到项目preselecetd
但是,如果我进入Room页面并尝试多选多个项目,那么这些项目就不会持久化
编辑:我已经看到它只发生在OneToMany关系船上.对于Manyto很多人来说,他们工作正常
EDIT2:
我说的是后端区域,我有表格和选择框,我可以选择多个项目.这种形式/ CRUD代码/控制器由学说生成.所以我不需要添加任何额外的功能.这是我的控制器代码
$editForm = $this->createForm(new RoomType(), $entity);
$request = $this->getRequest();
$editForm->bindRequest($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
当我试图在这样的控制器中走过
foreach($entity->getItems() as $item)
echo $item;
Run Code Online (Sandbox Code Playgroud)
然后我可以看到那里的所有项目.所以这意味着主要对象中的所有项目都存在,但它不会持久存在.我不知道为什么.
如果有欠,反面问题.我怎样才能将这种关系从反向和反向转变为拥有
gre*_*emo 10
根据您在注释中的注释,您的代码是错误的.
这是拥有方,因为您指定了inversedBy
属性:
/**
* ONE to many Bidir-- Inverse side
* @ORM\ManyToOne(targetEntity="Room", inversedBy="items")
* @ORM\JoinColumn(name="room_id", referencedColumnName="id")
**/
protected $room;
Run Code Online (Sandbox Code Playgroud)
这是反面(因为它具有mappedBy
属性):
/**
* ONE to many Bidir -- owning side
* @ORM\OneToMany(targetEntity="Item", mappedBy="Room", cascade={"persist"})
**/
protected $items;
Run Code Online (Sandbox Code Playgroud)
所以你的代码说:Item
是拥有方,Room
是反方.
的拥有侧的双向关系必须通过参考它的逆侧使用的的inversedBy属性的OneToOne,多对一,或多对多映射声明的.inversedBy属性指定实体中的字段,该字段是关系的反面.
为了使它更干净:
拥有方必须使用OneToOne,ManyToOne或ManyToMany映射声明的inversedBy属性.inversedBy属性包含反面的关联字段的名称.
而对于反方:
的逆侧的双向关系必须通过参考其持有端使用所述的的mappedBy属性的OneToOne,一对多,或多对多映射声明的.mappedBy属性指定作为关系所有者的实体中的字段.
然后再次:
反面必须使用OneToOne,OneToMany或ManyToMany映射声明的mappedBy属性.mappedBy属性包含拥有方的关联字段的名称.
另外,另一个重要的考虑:
ManyToOne始终是双向关联的拥有方.
OneToMany始终是双向关联的反面
因此,对于从反面(房间)保留项目,您必须检查已选择/取消选择的项目以及房间是否已包含该项目.
归档时间: |
|
查看次数: |
14541 次 |
最近记录: |