加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读