如果没有找到任何内容,则findOrFail()
方法会抛出404,例如:
User::findOrFail(1);
如何通过自定义列找到实体或失败,如下所示:
Page::findBySlugOrFail('about');
答案 0 :(得分:100)
试试这样:
Page::where('slug', '=', 'about')->firstOrFail();
答案 1 :(得分:2)
## Or Via Scope For Multiple Rows ##
public function scopeGetOrFail ($query)
{
if (empty($query->count())) {
abort(404);
} else {
return $query->get();
}
}
Page::whereSlug('about')->getOrFail();
Page::where("slug","about")->getOrFail();
答案 2 :(得分:1)
至少花了两个小时才意识到,如果在 Laravel 5.6 中的where()之后链接firstOrFail()方法,则它基本上会尝试检索表的第一条记录并删除where子句。因此,请在位置之前致电firstOrFail。
Model::firstOrFail()->where('something', $value)
答案 3 :(得分:0)
在我看来,当您对 eloquent 模型使用静态 find() 时,也许您可以定义函数 getRouteKeyName() 来显式获取您想要的列。
public function getRouteKeyName(){
return 'slug';
}
如果你坚持,你可以把它写成模型内部的静态函数
public static function findBySlugOrFail($value){
//get slug collection or return fail
return Post::where('slug', '=', $value)->firstOrFail();
}