php - 如何从 Vue 对 Laravel 执行批量删除?
问题描述
我正在尝试为网站制作大量删除功能,以同时删除产品列表。我通过excel插入数据。
控制器功能
public function destroy(Request $request)
{
ini_set('max_execution_time', 300);
$products = $request->all();
try {
DB::beginTransaction();
foreach ($products as $product) {
$dbProduct = $this->getProduct($product['SKU']);
Log::error($dbProduct);
$dbProduct->delete();
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
throw new HttpException(500, 'Sucedio un error eliminando la información favor intentar de nuevo');
}
}
private function getProduct($sku)
{
$product = Product::where('sku', $sku)->first();
return $product;
}
我不确定如何在 vue 部分执行 @click 方法,现在我有这个,但这用于在其他页面上上传,不确定要更改什么以使其删除。它正在接收一个具有被分成 50 个一组,这就是(数据,索引)。
sendData(data, index) {
this.loading = true;
this.error = {};
this.$http.post(this.baseUrl, data, this.params).then(
() => {
this.successAction();
this.statuses[index] = 1;
this.errorDis = false;
},
res => {
this.showErrors(res);
this.statuses[index] = 2;
this.errorDis = true;
}
);
}
目前我获得了成功状态,但它没有删除产品
解决方案
恕我直言,您可以使用一个查询而不是$products->count() * 2
查询来删除所有产品,如下所示:
public function destroy(Request $request)
{
//ini_set('max_execution_time', 300); no need IMHO
$products = collect($request->all());
$skus = $products->pluck('SKU');
try {
DB::beginTransaction();
Product::whereIn('sku', $skus)->delete();
DB::commit();
} catch (Exception $e) {
DB::rollBack();
throw new HttpException(500, 'Sucedio un error eliminando la información favor intentar de nuevo');
}
// it's better to return something here
return response('Finished!', 200);
}
更新:
正如@ceejayoz 所指出的,上面的函数绕过了单独的雄辩事件 deleting
,deleted
如果你需要它们,或者你需要单个Product
模型,这里是一个执行查询的较少剥离的版本:$products->count() + 1
public function destroy(Request $request)
{
//ini_set('max_execution_time', 300); probably unneeded
$skus = collect( $request->all() )->pluck('SKU');
$products = Product::whereIn('sku', $skus)->get();
try {
DB::beginTransaction();
foreach ($products as $product) {
Log::error($product);
$product->delete();
}
DB::commit();
} catch (Exception $e) {
DB::rollBack();
throw new HttpException(500, 'Sucedio un error eliminando la información favor intentar de nuevo');
}
// it's better to return something here
return response('Finished!', 200);
}
推荐阅读
- ios - Xcode 10“导入”显示完成只显示当前文件夹类,这是功能还是错误?
- php - Yii2 ORM智能获取相关模型
- c++ - 仅使用 C++ 和 cmd 创建 .lnk 文件
- sql-server - 通过 ssh 连接到 docker sqlserver
- angular - 如何使用 [ngStyle] Angular 5 的图像作为背景
- symfony - 如何防止 Symfony 4 中出现“类名或命名空间可能有错字”的错误?
- php - 提交到另一个页面后通过 id 从数据库中获取数据
- python - 如何在 python 中使用 sys.stdin.read()
- python - 绘制小平面网格的图例
- foreach - 对于使用 Visual Studio 2017 在 C++ CLI 中来自 MSDN 的每个都会产生编译错误