Laravel получает коллекцию удалить ничего - PullRequest
0 голосов
/ 06 мая 2018

Я отправляю коллекцию идентификаторов by checkbox на мой контроллер, чтобы удалить их все вместе, Я получаю сеть 200, но ничего не удалит .

javascript

<script type="text/javascript">
  $(document).ready(function() {
    $('#multidel').on('click', function(e) {
      e.preventDefault();
      $.ajaxSetup({
          headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
      });

      $.ajax({
        url: '{{ url('admin/delmultipleproducts') }}',
        type: "POST",
        dataType: "json",
        data: $('.productsfordel:checked').serialize(),
        success:function(data) {
          console.log('done');
        }
      });

      $(document).ajaxStop(function(){
          alert('successfully deleted.');
          window.location.reload();
      });

    });
  });
</script>

controller

public function multipledel(Request $request){

        $product = Product::where('id', $request->productsfordel);
        if(!empty($product->suboptions)){
          $product->suboptions()->detach();
        }
        if(!empty($product->subspecifications)){
          $product->subspecifications()->detach();
        }
        if(!empty($product->relatives)){
          $product->relatives()->detach();
        }
        if(!empty($product->imageOne)){
          Storage::delete($product->imageOne);
        }
        if(!empty($product->imageTwo)){
          Storage::delete($product->imageTwo);
        }
        $product->delete();

      // Session::flash('success', 'Selected products are successfully deleted.');
      // return redirect()->route('products.index');
    }

route

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

есть идеи, почему это так?

UPDATE

если я изменю свои данные ajax на serialize() вместо val(), я получу

array:3 [
  0 => "35"
  1 => "34"
  2 => "33"
]

и когда я удаляю, удаляются только id = 35, `только один из них вместо всех.

Ответы [ 2 ]

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

Вы получаете массив идентификаторов. Так что это будет работать.

$products = Product::whereIn('id', $request->productsfordel)->get();
foreach($products as $product){
  $product->suboptions()->detach();
  $product->subspecifications()->detach();
  $product->relatives()->detach();
  if(!empty($product->imageOne)){
      Storage::delete($product->imageOne);
    }
  if(!empty($product->imageTwo)){
    Storage::delete($product->imageTwo);
  }
  $product->delete();
}

Или вы можете сделать все это в наблюдаемых Laravel и здесь просто написать

Product::whereIn('id', $request->productsfordel)->delete();
0 голосов
/ 06 мая 2018

Я думаю, что вы возвращаете коллекцию здесь -

$product = Product::where('id', $request->productsfordel);

Вы должны вернуть первый товар,

$product = Product::where('id', $request->productsfordel)->get()->first();

ИЛИ, если вы уверены, что он проиндексирован по первичному ключу (т. Е. Ваш идентификатор является первичным ключом

Вы должны сделать

$product = Product::find($request->productsfordel);

ИЛИ если вы хотите удалить все товары согласно запросу

foreach($request->productsfordel as $id) {
 $product = Product::find($id);
        if(!empty($product->suboptions)){
          $product->suboptions()->detach();
        }
        if(!empty($product->subspecifications)){
          $product->subspecifications()->detach();
        }
        if(!empty($product->relatives)){
          $product->relatives()->detach();
        }
        if(!empty($product->imageOne)){
          Storage::delete($product->imageOne);
        }
        if(!empty($product->imageTwo)){
          Storage::delete($product->imageTwo);
        }
        $product->delete();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...