Laravel восстановить обратно удаленную запись - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь реализовать очередь, чтобы система восстановила обратно удаленную запись.Теперь мой код работает без ошибок, но запись не будет восстановлена ​​после удаления.

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
}

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я предполагаю, что ваш код удаляет запись где-то еще, и код, который вы здесь представили, должен восстановить эту запись на основе класса модели и идентификатора записи, переданного через массив $data как ['Class' => ..., 'id' => ...].

Тогда для чего предназначена ваша транзакция? Есть ли код, который вы не вставили? В противном случае catch никогда не вызывается, поскольку не генерируется исключение и, следовательно, ваш код не выполняется.

Так что просто удалите попытку и поймайте.

0 голосов
/ 25 января 2019

Вы можете использовать следующий код, надеюсь, он вам поможет.

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');
}
...