从数组更新实体

Update entities from an array

在 Symfony 3.3 上,学说 2.5 和 PHP 5.5.9

我的前台正在向我的 API 发送一个看起来像

的数组

[{id: 1, value: 2}, {id: 2, value: 2423}, {id: 56, value: 323.3}]

我需要用所有这些值更新我的实体。

我遇到过this

foreach ($repo->findById($ids) as $obj) {
    $obj->setOrder(array_search($obj->getId(), $ids));
}

$em->flush();

但我无法靠自己的头脑来更新数组中的值。

使用输入的数组更新实体的每个值的最佳方法是什么?

$data = json_decode('[{id: 1, value: 2}, {id: 2, value: 2423}, {id: 56, value: 323.3}]', true);

// After decoding your data - build idValue map - 
// array where key is `id` field and value is `value` field
$idValueMap = array_column($data, 'value', 'id');

// using `array_keys` you can find all items with required ids     
foreach ($repo->findById(array_keys($idValueMap)) as $obj) {
    // and `$idValueMap[$obj->getId()]` will give you the required value for update
    $obj->setOrder($idValueMap[$obj->getId()]);
}

$em->flush();