【发布时间】:2018-11-29 14:22:11
【问题描述】:
我想交换图像顺序(从 angularjs/ui-sortable 检索到的数据,因此 $newImgOrder 数组表示新顺序。)
(array) $newImgOrder = ['test.jpeg', 'another.jpeg'];
Images::select('url')->where('project_id', '=', $args['id'])->get()
->each(function($img) use (&$newImgOrder) {
foreach ($newImgOrder as $item) {
$img->url = $item;
$img->save();
}
});
* 已更新 = 执行此操作的正确方法 *
感谢@Devon
删除了 foreach + select()
(array) $newImgOrder = ['test.jpeg', 'another.jpeg'];
Images::where('project_id', '=', $args['id'])->get()
->each(function($img) use (&$newImgOrder) {
$img->url = array_shift($item);
$img->save();
}
});
这是我想要做的快速演示:
动作前的表格状态
+---------+-------------+--------------+
| id | project_id | url |
+---------+-------------+--------------+
| 1 | 15 | another.jpeg |
+---------+-------------+--------------+
| 2 | 15 | test.jpeg |
+---------+-------------+--------------+
预期结果 =
+---------+-------------+--------------+
| id | project_id | url |
+---------+-------------+--------------+
| 1 | 15 | test.jpeg |
+---------+-------------+--------------+
| 2 | 15 | another.jpeg |
+---------+-------------+--------------+
实际结果=
+---------+-------------+--------------+
| id | project_id | url |
+---------+-------------+--------------+
| 1 | 15 | another.jpeg |
+---------+-------------+--------------+
| 2 | 15 | another.jpeg |
+---------+-------------+--------------+
那个迭代有什么问题。我尝试了双 foreach 但我得到了相同的结果......我错过了什么吗?任何帮助将不胜感激。谢谢。
【问题讨论】:
-
想想这里的逻辑。对于每张图片,你都在循环 $newImageOrder 并保存该图片的 url。因此,您为每张图像执行两次保存。
-
嗨@Devon,是的,我同意你的观点,但我只想覆盖现有值。抱歉,我是 eloquent 的新手 :D 对于真正的逻辑,你更喜欢什么?
-
逻辑与雄辩无关。你在不应该的时候循环。我添加了一个答案。