【问题标题】:How to apply values from array and update rows using Laravel Eloquent?如何使用 Laravel Eloquent 应用数组中的值并更新行?
【发布时间】: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


【解决方案1】:

您可以尝试以下方法...

$sortOrder = [1, 2, 0, 3, 4];
$updateArray = ['Type' => 'B', 'param2' => ''];
$collection = Type::whereIn('nOrder', $sortOrder);
$data = $collection->get();
$collection->update($updateArray);

我没有对此进行测试,但这应该可以。

【讨论】:

  • 我正在尝试更新表而不是从中获取信息。基本上我需要一个 updateIn()。
  • 您可以编辑答案,以便我给您投票吗?它说我无法投票,因为它已被锁定,但如果您编辑任何内容,它就会解锁。
  • 太好了,它对你有用,请给我的答案投票,以便其他人也可以使用它。
猜你喜欢
  • 2013-12-24
  • 2021-08-28
  • 2021-03-30
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多