обновить все строки в таблице одновременно на laravel - PullRequest
0 голосов
/ 16 января 2020

У меня есть столбец 'section_order', это раздел заказа, начинающийся с 1 до конца таблицы, проблема в том, что когда я удаляю один раздел или более, порядок меняется не go, как те же 1,2,3, .. поэтому я хочу изменить порядок столбцов 'section_order' как c и обновить его из первой строки 1,2,3, ....

Я пытаюсь этот код, но он неправильный

     $last_order = Section::latest('section_order')->get();

     $orders_num=$order_last[0]['section_order'];

     for ($i=1; $i <= $orders_num ; $i++) {
         Section::orderBy('section_order', 'asc')->update([
             'section_order' => $i
         ]);
     }

Ответы [ 3 ]

0 голосов
/ 16 января 2020

Для сортировки и изменения данных одним запросом SQL вы можете использовать такую ​​схему

  DB::statement("SET @r=0");
  $query = 'UPDATE `table` SET `column` = @r:= (@r+1) ORDER BY `sortable_column` ASC';
  DB::statement($query);
0 голосов
/ 20 января 2020

я нашел решение для моей проблемы после удаления обновления строки, все строки ниже мой код в контроллере ...

public function destroy(Request $request)
{

   $ids_delete=$request->section_id;

   if (!empty($ids_delete))
      {
        $ids_delete = explode(",",$request->section_id);

        foreach( $ids_delete as $id_delete)
      {

    $order_id = Section::where('section_id', $id_delete)->first();
    $the_section_order=$order_id->section_order;

    Section::findOrFail($id_delete)->delete();

    Section::where('section_order','>',$the_section_order)
    ->update(['section_order' => DB::Raw('section_order - 1')]);
} 
0 голосов
/ 16 января 2020

Сделай одну вещь. Когда вы удаляете свою запись, пожалуйста, переупорядочьте все записи, как показано ниже:

$id = 1; // Id before deleted one
Section::where('id','>',$id)->decrement('section_order');

Laravel имеют метод по умолчанию приращения () и уменьшения (), который будет уменьшать 'section_order' на единицу, поэтому нет необходимости использовать l oop и обновление

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...