php – Symfony 2 / Doctrine 2:对PersistentCollection进行更改

前端之家收集整理的这篇文章主要介绍了php – Symfony 2 / Doctrine 2:对PersistentCollection进行更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个应用程序,用户可以在其中编辑一些数据,然后呈现一个屏幕,他可以在其中确认(并评论)他的编辑.

在确认表单中,我显示了对实体所做的更改.这适用于“普通”字段.以下是一些用于检查单个字段的代码

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

猜你在找的PHP相关文章