Php Laravel还原回已删除的记录
我正在尝试实现一个队列,该队列将系统还原回一条已删除的记录。现在,我的代码正常工作,但记录在删除后不会恢复Php Laravel还原回已删除的记录,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我正在尝试实现一个队列,该队列将系统还原回一条已删除的记录。现在,我的代码正常工作,但记录在删除后不会恢复 public function delete_invoice($job, $data) { Debugbar::info("invoiceSale"); try { return DB::transaction(function ()use ($job,$data) { }); } c
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
}
公共函数销毁($id,$message='')
{
调试栏::信息(“确定”);
队列::推送('IQueue@delete_invoice', [
'id'=>$id,
'Class'=>$this->Class,
]);
returnparent::destroy($id,trans($this->class.invoice));您可以使用以下代码,希望它能帮助您
public function destroy(Trip $trip)
{
$trip->delete();
flash()->warning('Trip '.$trip->id.' successfully deleted! <a href=trips/'.$trip->id.'/restore>UNDO</a>');
return redirect('trips');
}
public function restore(Request $request)
{
$trip = Trip::withTrashed()->where('id', $request['id'])->restore();
return redirect ('trips');
}
公共功能销毁(Trip$Trip)
{
$trip->delete();
flash()->警告('Trip'.$Trip->id.'successfully deleted!');
返回重定向(“trips”);
}
公共功能还原(请求$Request)
{
$trip=trip::withTrashed()->where('id',$request['id')->restore();
返回重定向(“trips”);
}
您可以使用以下代码,希望对您有所帮助
public function destroy(Trip $trip)
{
$trip->delete();
flash()->warning('Trip '.$trip->id.' successfully deleted! <a href=trips/'.$trip->id.'/restore>UNDO</a>');
return redirect('trips');
}
public function restore(Request $request)
{
$trip = Trip::withTrashed()->where('id', $request['id'])->restore();
return redirect ('trips');
}
公共功能销毁(Trip$Trip)
{
$trip->delete();
flash()->警告('Trip'.$Trip->id.'successfully deleted!');
返回重定向(“trips”);
}
公共功能还原(请求$Request)
{
$trip=trip::withTrashed()->where('id',$request['id')->restore();
返回重定向(“trips”);
}
我假设您的代码在其他地方删除了记录,并且您在这里展示的代码应该基于通过$data
数组传递的模型类和记录id恢复该记录,作为['class'=>,'id'=>…]
那么您的事务打算做什么?是否有您没有粘贴的代码?否则,不会调用catch,因为不会引发异常,因此不会执行您的代码
因此,只需删除try-and-catch。我假设您的代码在其他地方删除了该记录,并且您在这里展示的代码应该根据通过$data
数组传递的模型类和记录id还原该记录,如['class'=>,'id'=>…]
那么您的事务打算做什么?是否有您没有粘贴的代码?否则,不会调用catch,因为不会引发异常,因此不会执行您的代码
因此,只需删除try-and-catch。警告:我希望您能够100%控制$data
中的内容,因为您正在使用extract()
(特别是使用默认标志)。是否有关于Laravel 4.2的extract()
的示例或文档?我不确定是否能够100%控制内容。extract()
是一个核心PHP函数,与Laravel无关。该函数不应用于您无法100%控制(您创建了它)的数据,即使如此,如果您不小心,它也可能导致副作用。只需像这样访问数据:$data['id']
相反。在此上下文中不需要使用该函数。实际上,我使用extract()
函数删除中的其他数据,尝试,没有任何问题。我认为您不理解extract()
的问题。如果您没有100%的控制权,并且存在$data['foo']
在数组中,并且在extract()之前定义了一个变量$foo
,它将用$data
-数组中的值覆盖已定义的$foo
变量。警告:我希望您能够100%控制$data
中的内容,因为您正在使用extract()
(特别是默认标志)。是否有关于Laravel 4.2的extract()
的示例或文档?我不确定我是否100%控制了内容。extract()
是一个核心PHP函数,与Laravel无关。该函数永远不应该用于您无法100%控制的数据(您创建了它)即使这样,如果你不小心,它也会产生副作用。只需访问如下数据:$data['id']
。在这种情况下不需要使用该函数。实际上,我使用extract()
函数删除try
中的其他数据,没有任何问题。我认为你不理解extract()的问题
。如果您没有100%的控制权,并且数组中有一个$data['foo']
,并且在提取()之前定义了一个变量$foo
,它将用$data
-数组中的值覆盖定义的$foo
变量。该事务还将执行删除操作,但我进行了验证,如果出现错误,它将捕获。因此,代码将始终捕获,因为我已经让它始终出错以进行测试。在这种情况下,我将验证fy$数据是否如您预期的那样包含“类”和“id”。此外:您是否在模型上使用?控制器的$this->Class
属性可能不会返回模型的类(我猜是发票).是的…我已经使用了SoftDeletingTrait
。我发现执行了restore
函数,然后返回到destroy
函数,但是destroy
函数的结尾总是再次删除数据。事务也会执行删除操作,但我进行了验证,如果出现问题,它会捕获g、 因此,代码总是会被捕获,因为出于测试目的,我已经让它总是出错。在这种情况下,我将验证$data是否如您所期望的那样包含“Class”和“id”。此外:您是否在模型上使用了?您的控制器的$this->Class
属性可能不会返回您模型的类(我猜是发票)是的…我已经使用了SoftDeletingTrait
。我发现执行了restore
函数,然后返回到destroy
函数,但是destroy
函数的末尾总是再次删除数据。