Я хочу сделать множественное удаление в laravel 5.5, я пробовал формы, которые не работали, поэтому я решил вместо этого использовать ajax.
Что я пытаюсь сделать:
- Используйте флажок для выбора нескольких записей / идентификаторов продуктов.
- Отправьте их на контроллер по ajax.
- Удалить их.
Коды
controller
public function multipledel(Request $request){
$deli = $request->input('productsfordel'); //get id's of selected post/products
$product = Product::where('id', [$deli]); //find those id's in DB
$product->delete(); // Delete them
Session::flash('success', 'Selected products are successfully deleted.');
return redirect()->route('products.index');
}
route
Route::post('delmultipleproducts', 'ProductController@multipledel')->name('delmultipleproducts');
ajax
<script type="text/javascript">
$(document).ready(function() {
$('#multidel').on('click', function(e) { //define which button to click for multiple delete
e.preventDefault();
$.ajaxSetup({
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') }
});
var idss = $('#productsfordel').val(); //where to get id's from
if(idss) {
$.ajax({
url: '{{ url('admin/delmultipleproducts') }}',
type: "POST",
dataType: "json",
success:function(data) {
console.log('working');
}
});
}else{
console.log('not working');
}
});
});
</script>
blade
<button id="multidel" name="multidel">Delete All</button>
<thead>
<th class="text-center">xxxxx</th>
</thead>
<tbody>
@foreach($products as $product)
<tr>
<td>
<input type="checkbox" id="productsfordel" name="productsfordel[]" value="{{ $product->id }}" />
</td>
// rest of table
Вопросы
вот что я получаю в своей сети в результате:
Есть идеи?
UPDATE
Основываясь на Бабак ответ Я могу получить какой-то результат в сети, что означает, что идентификаторы фактически отправляются, вот ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`mysite`.`product_relatives`, CONSTRAINT `product_relatives_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`)) (SQL: delete from `products` where `id` = 48)
поэтому я понимаю, что он должен что-то делать с моим методом синхронизации продуктов, таким как опции и спецификации, и я изменил свою функцию на:
public function multipledel(Request $request){
$deli = $request->input('productsfordel');
$product = Product::where('id', [$deli]);
// added from here
$product->suboptions()->detach();
$product->subspecifications()->detach();
if(!empty($product->imageOne)){
Storage::delete($product->imageOne);
}
if(!empty($product->imageTwo)){
Storage::delete($product->imageTwo);
}
//to here
$product->delete();
Session::flash('success', 'Selected products are successfully deleted.');
return redirect()->route('products.index');
}
Теперь я получаю:
Call to undefined method Illuminate\Database\Query\Builder::suboptions()
есть идеи?