[英]Route Model Binding and Soft Deletes - 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
綁定:
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”,其工作方式相同,但有一個“已批准”欄目,以顯示某些事情是否得到了主持人的批准。 然后我把它放在我的approvedTrait類中:
public static function find($id, $columns = array('*'))
{
return self::withUnapproved()->find($id, $columns);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.