Eloquent метод save () не работает внутри цикла for - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть таблица, подобная приведенной ниже, и эта таблица будет использоваться для изображений проекта.

id: первичный ключ

project_id: столбец, имеющий корреляцию с проектами.

order_num: представляет порядок списка изображений для конкретного проекта (например, внутренний вид проекта, внешний вид проекта строительства, другой аспект и т. Д...)

+---------+-------------+-----------+
| id      | project_id  | order_num |  
+---------+-------------+-----------+
| 1       | 15          | 0         |
+---------+-------------+-----------+
| 2       | 15          | 0         |
+---------+-------------+-----------+
| 3       | 16          | 0         |
+---------+-------------+-----------+
| 4       | 16          | 0         |
+---------+-------------+-----------+
| 5       | 16          | 0         |
+---------+-------------+-----------+
                 .
                 .
                 .   

         GOES ON LIKE THIS


What i want to do:

+---------+-------------+-----------+
| id      | project_id  | order_num |  
+---------+-------------+-----------+
| 1       | 15          | 1         |
+---------+-------------+-----------+
| 2       | 15          | 2         |
+---------+-------------+-----------+
| 3       | 16          | 1         |
+---------+-------------+-----------+
| 4       | 16          | 2         |
+---------+-------------+-----------+
| 5       | 16          | 3         |
+---------+-------------+-----------+

Я использую Slim с Eloquent

Я понял что-то подобное, но у меня плохой метод ошибка метода save ().

$find = Images::where('project_id', '=', $project->id)->count();

$img = Images::where('project_id', '=', $project->id);

for ($i = 1; $i <= $find; $i++) {
     $img->order_num = $i;
     $img->save();
}

Я что-то не так делаю?Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ [!!] Оба ответа дают правильные результаты, но согласно информации Одана, ответ Апокрифоса - чистый код.Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

$img представляется объектом построения запросов.

Если вы сделаете $img = Images::where('project_id', '=', $project->id)->get();, вы получите все, что нужно обновить, например:

 $index = 1;
 Images::where('project_id', '=', $project->id)->get()
        ->each(function ($img) use (&$index) {
              $img->order_num = $index++;
              $img->save();
         });

Это обновит все индексы изображений для одного идентификатора проекта.Если вы хотите сделать все из них, то вы можете сделать:

 $index = 0;
 $lastProjectId = null;
 Images::orderBy('project_id')->get()
        ->each(function ($img) use (&$index, $lastProjectId) {
              if ($lastProjectId == null) {
                 $lastProjectId = $img->project_id; 
              }   
              if ($img->project_id != $lastProjectId) {
                 $index = 1;
                 $lastProjectId = $img->project_id;
              }
              $img->order_num = $index++;
              $img->save();
         });
0 голосов
/ 25 ноября 2018

попробуйте просто это

$imgs = Images::where('project_id', '=', $project->id)->get();
foreach($imgs as $i => $img) {
    $img->order_id = $i + 1;
    $img->save();
}
...