【发布时间】:2019-06-18 23:30:22
【问题描述】:
我正在尝试实现系统将恢复到已删除记录的队列。现在我的代码可以正常工作,但删除后记录不会恢复。
public function delete_invoice($job, $data)
{
Debugbar::info("invoiceSale");
try {
return DB::transaction(function ()use ($job,$data) {
});
} catch (TransactionException $e) {
# reestore function
extract($data);
$data = $Class::withTrashed()->find($id);
$data->restore();
Debugbar::info($data->toArray());
return Response::json(['errors' => array_flatten($e->getErrors())], 400);
}
}
这是控制器的功能
public function destroy($id, $message = '')
{
Debugbar::info("ok");
Queue::push('IQueue@delete_invoice', [
'id' => $id,
'Class' => $this->Class,
]);
return parent::destroy($id, trans("$this->class.invoice")); <--delete invoice
}
【问题讨论】:
-
警告:我希望你能 100% 控制
$data中的内容,因为你使用的是extract()(特别是使用默认标志)。跨度> -
Laravel 4.2 是否有关于
extract()的示例或文档?我不确定我是否能 100% 控制内容。 -
extract()是 PHP 的核心函数,与 Laravel 无关。该功能永远不应该用于您无法 100% 控制的数据(您已经创建了它),即使如此,如果您不小心,它也会导致副作用。只需像这样访问数据:$data['id']。在这种情况下无需使用该功能。 Here's the manual -
其实我是用
extract()函数把我在try中的其他数据删除没有问题的。 -
我认为您不理解
extract()的问题。如果您没有 100% 的控制权并且您的数组中有一个$data['foo']并且您在 extract() 之前定义了一个变量$foo,它将用 @ 中的值覆盖您定义的$foo变量987654336@-数组。 Read the warnings in the manual
标签: php laravel laravel-4 eloquent