Laravel множественное удаление - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь добавить множественный выбор в свое приложение и сразу удалить данные, но они не будут удалены из базы данных.

Коды

controller

public function multipledel(Request $request){
  $deli = $request->input('productsfordel');
  $product = Product::whereIn('id', $deli);
  $product->delete();
  return redirect()->route('products.index')->with('success', 'Selected products are successfully deleted.');
}

route

  Route::post('delmultipleproducts', 'ProductController@multipledel')->name('delmultipleproducts');

blade

//multiple delete form starts before table begin
{!! Form::open(['method' => 'Post', 'route' => ['delmultipleproducts'] ]) !!}

//delete button
<button name="bulk_delete" id="bulk_delete" data-toggle="tooltip" data-placement="top" title="Delete Selected" class="btn btn-xs btn-theme04" type="submit"><i class="fa fa-trash-o"></i></button>   

<thead>
//table headears
</thead>
<tbody>
@foreach($products as $product)
<tr>
  //my checkbox's
  <td>
    <input type="checkbox" name="productsfordel[]" class="checkboxes" value="{{ $product->id }}" />
  </td>

// my multiple delete form closes here
{!! Form::close() !!}

//rest of the table...

Вопросы

  1. Я получаю несколько ошибок!

первый

В foreach указан неверный аргумент ()

секунда

SQLSTATE [23000]: нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

третий

Он возвращает мой сеанс успеха и говорит Selected products are successfully deleted., но это не так.

мнение

Я думаю, что ошибки, которые я получаю, относятся к данным, прикрепленным к моим продуктам, где у меня есть код, указанный ниже в моем обычном методе удаления one by one

public function destroy($id)
    {
      $product = Product::findOrFail($id);
      $product->suboptions()->detach();
      $product->subspecifications()->detach();
      if(!empty($product->imageOne)){
        Storage::delete($product->imageOne);
      }
      if(!empty($product->imageTwo)){
        Storage::delete($product->imageTwo);
      }
      $product->delete();
      return redirect()->route('products.index')->with('success','Product successfully deleted');
    }

Как вы можете видеть, у меня есть несколько условий и синхронизированных данных для каждого из моих продуктов, но в моем методе множественного удаления их нет, однако я попытался также включить их, но это выдало ошибку на $product = Product::whereIn('id', $deli); не уверен, может быть, мне нужно, чтобы массив $deli как-то?

есть идеи?

UPDATE

Я понимаю, что ничто не отправит на мой контроллер, когда я попробовал dd($deli); я получил ноль вместо id выбранных продуктов.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Когда дело доходит до многократного удаления за один раз, вы можете просто сделать

Product::destroy($request->get('productsfordel'));
return redirect()->route('products.index')->with('success', 'Selected products are successfully deleted.');
0 голосов
/ 04 мая 2018

Eloquent whereIn требует передачи массива значений, поэтому вы получаете уведомление foreach.

SQLSTATE [23000]: нарушение ограничения целостности: 1451 Невозможно удалить или обновить родительскую строку: ограничение внешнего ключа не выполняется

Вы получаете это только потому, что ваш внешний ключ не имеет поведения ON DELETE, поэтому вам следует сначала вручную удалить дочерние (ссылочные) записи (модели).

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