При использовании мягких удалений и маршрутизации к привязке к модели их возникает ситуация, когда вы не можете просмотреть введенную модель, если она была «мягкой».
например
У меня есть модель работы. если я «мусор» одной из этих моделей, а затем откройте корзину и попытаюсь просмотреть модель задания, я получаю ресурс 404, который не найден. Я решил это, используя функцию Route :: bind () как таковую
Route::bind('job', function($id, $route) { return Job::withTrashed()->find($id); });
хотя это кажется ненужным и немного глупым … есть ли способ обойти это, поэтому я могу использовать очень красноречивое однострочное связывание:
Route::model('job', 'Job');
Поскольку Route :: model () использует метод find в модели, вы можете просто переопределить метод для извлечения поврежденных объектов:
class Job extends Eloquent { public static function find($id, $columns = array('*')) { return parent::withTrashed()->find($id, $columns); } }
Теперь вы можете использовать привязки моделей без закрытия
Route::model('job', 'Job');
Будьте осторожны при использовании метода find, где вы не хотите извлекать поврежденные объекты.
То, что вы наметили в своем вопросе, похоже, решит его.
Небольшое уточнение состоит в том, что вы можете указать, какой конкретный ключ включать в себя разбитые модели.
Например, обычная модель маршрута привязывается так:
Route::model('job', 'Job');
И определите другой ключ, например «anyjob», где вы также можете запросить заданные запросы:
Route::bind('anyjob', function($id) { return Job::withTrashed()->find($id); });
Затем для маршрутов, в которых вы не хотите включать дефрагментированные задания, вы просто ссылаетесь на job
:
get('/jobs/{job}/edit', ['controller' => 'JobsController@edit']); // We don't want to be able to edit a trashed job.
И anyjob
только на привязку anyjob
для маршрутов, где anyjob
с anyjob
:
delete('/jobs/{anyjob}', ['controller' => 'JobsController@destroy']); // we could then forceDelete the trashed job for example as it'll be correctly injected in out our controller method
Это препятствует тому, чтобы вы закончили модели с мягким удалением в методах контроллера, которые в противном случае не имели бы с ними отношения. Вы указываете точные маршруты, которые могли бы принять любое задание, или даже просто сработали задания.
В дополнение к этому, если вы создали свои собственные черты и области, вы можете определить функцию поиска там. Например, у меня есть «approvedTrait», который работает одинаково, но с «одобренным» столбцом, чтобы показать, одобрено ли что-то модератором. Затем я просто положил это в свой класс одобренного титра:
public static function find($id, $columns = array('*')) { return self::withUnapproved()->find($id, $columns); }