Маршрутная привязка модели и мягкие удаления – Laravel 4

При использовании мягких удалений и маршрутизации к привязке к модели их возникает ситуация, когда вы не можете просмотреть введенную модель, если она была «мягкой».

например

У меня есть модель работы. если я «мусор» одной из этих моделей, а затем откройте корзину и попытаюсь просмотреть модель задания, я получаю ресурс 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); }