Laravel 5.4. No query results for model при обращении к Route::post-экшену

195
30 сентября 2017, 23:25

Доброго времени суток. Делаю мягкое удаление для ресурса, при переходе в виде по ссылке "Восстановить" (ссылка посылает POST к route('announces.restore') ), выдаёт

NotFoundHttpException
No query results for model [App\Announce].

routes/web.php:

Route::resource('/announces', 'AnnounceController');
Route::post('/announces/{announce}/restore', 'AnnounceController@restore')->name('announces.restore');
Route::post('/announces/{announce}', 'AnnounceController@softDelete')->name('announces.softDelete');

AnnounceController@restore:

public function restore(Announce $announce) //если обойтись без объекта модели, работает
{
    $announce->restore();
    return redirect()->route('announces.index')->with(['message' => 'restore.success', 'id' => $announce->id]);
}

views/announce/index.blade.php:

<a href="{{ route('announces.restore', ['announce'=>session('id')]) }}"
   onclick="event.preventDefault();
   document.getElementById('restore-form').submit();">
   Восстановить
</a>
<form id="restore-form" action="{{ route('announces.restore', ['announce'=>session('id')]) }}" method="post" style="display: none;">
    {{ csrf_field() }}
</form>

Я реализовал немного по-другому экшн:

public function restore(Request $r)
{
    $id = $r->announce;
    $a = Announce::onlyTrashed()
            ->where('id', $id)
            ->restore();
    return redirect()->route('announces.index')->with(['message' => 'restore.success', 'id' => $id]);
}

Это работает, однако хотелось узнать, почему не получается через объект модели это сделать. Заранее спасибо!

Answer 1

Потому что по умолчанию эти записи не попадают в запрос, в этом то их и фишка.

Цитата из официальной документации:

As noted above, soft deleted models will automatically be excluded from query results. However, you may force soft deleted models to appear in a result set using the withTrashed method on the query

READ ALSO
php openssl_decrypt Ошибка: digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

php openssl_decrypt Ошибка: digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

Пытаюсь передать зашифрованные данные с одного своего домена на другойВот функция шифрования:

357
PDO execute() подставляет нули вместо переменных

PDO execute() подставляет нули вместо переменных

PDO всё верно подставляет куда требуется

231
Поиск по многомерному массиву php

Поиск по многомерному массиву php

ЗдравствуйтеИмеется массив такого вида:

319
Работа return в рекурсивной функции php

Работа return в рекурсивной функции php

Доброго времени сутокЕсть код

208