php – Symfony 2 / Doctrine 2:对PersistentCollection进行更
发布时间:2020-12-13 14:14:29 所属栏目:PHP教程 来源:网络整理
导读:我正在构建一个应用程序,用户可以在其中编辑一些数据,然后呈现一个屏幕,他可以在其中确认(并评论)他的编辑. 在确认表单中,我显示了对实体所做的更改.这适用于“普通”字段.以下是一些用于检查单个字段的代码: // create $form// bind $formif ($form-isVali
我正在构建一个应用程序,用户可以在其中编辑一些数据,然后呈现一个屏幕,他可以在其中确认(并评论)他的编辑.
在确认表单中,我显示了对实体所做的更改.这适用于“普通”字段.以下是一些用于检查单个字段的代码: // create $form // bind $form if ($form->isValid() { $data = $form->getData(); // example,get changes of a "normal" field if ($data['color'] != $entity->getColor()) { // do something with changes } } 但我不能对关系做同样的事情(例如ManyToMany with Users): if ($data['users'] != $entity->getUsers() 不起作用,因为$data [‘users’]和$entity-> getUsers()引用相同的持久集合.可以调用此函数来查看是否有更改: if ($data['users']->isDirty()) 但是不可能看到做了哪些改变. 上面的第二个问题是,如果从持久集合中删除所有项目,则Doctrine不会将其标记为“已更改”(isDirty()= true),因此我无法捕获用户删除所有内容的具体更改“用户“来自表单中的实体. 请注意,代码全部有效,我唯一的问题是我无法查看/处理在确认步骤中所做的更改.
在绑定之前将原始集合存储在变量中,然后在绑定之后比较新集合. PHP有很多数组比较函数,并且集合很容易通过$collection-> toArray();
例如: // create form $oldusers=$entity->getUsers()->toArray(); // bind form if ($form->isValid() { $data = $form->getData(); if ($data['users'] != $oldusers) { // do something with changes } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |