【发布时间】:2015-05-18 09:37:15
【问题描述】:
如果我有这样的表:
+--------+-------------------+-----------+
| ID | Type | nOrder |
+--------+-------------------+-----------+
| 1 | A | 0 |
| 2 | A | 1 |
| 3 | A | 2 |
| 4 | B | 0 |
| 5 | B | 1 |
| 6 | B | 2 |
| 7 | B | 3 |
| 8 | B | 4 |
| 9 | C | 0 |
| 10 | C | 1 |
+--------+-------------------+-----------+
使用 Laravel Eloquent:
$sortOrder = [1, 2, 0, 3, 4];
$list = Type::where('Type', '=', 'B')
->orderBy('nOrder', 'ASC')
->update(['nOrder' => ??? ]); // how can i apply the $sortOrder values at ???
我的猜测是,更新看起来像这样:
->update(['nOrder' => $sortOrder[DB::raw('`nOrder`')] ]); // this doesn't work though
预期结果如下所示:
+--------+-------------------+-----------+
| ID | Type | nOrder |
+--------+-------------------+-----------+
| 1 | A | 0 |
| 2 | A | 1 |
| 3 | A | 2 |
| 4 | B | 1 |
| 5 | B | 2 |
| 6 | B | 0 |
| 7 | B | 3 |
| 8 | B | 4 |
| 9 | C | 0 |
| 10 | C | 1 |
+--------+-------------------+-----------+
【问题讨论】:
-
那么,您的问题不在于构建查询本身,而在于将其重新格式化为 laravel/eloquent?顺便说一句,请注意
order是一个保留字 - 对于表/列标识符来说是一个糟糕的选择。 -
我修复了这个例子,所以它现在是 nOrder。我希望问题的标题是不言自明的。
-
你必须循环
$sortOrder我猜没有一步。 -
我很确定有一种方法可以使用单个查询进行更新。如果你必须为这样的事情运行 n 行 n 查询是没有意义的。
标签: php mysql laravel eloquent