Laravel - 按自定义列查找或失败

时间:2015-03-23 14:35:23

标签: laravel laravel-4 eloquent laravel-5

如果没有找到任何内容,则findOrFail()方法会抛出404,例如:

User::findOrFail(1);

如何通过自定义列找到实体或失败,如下所示:

Page::findBySlugOrFail('about');

4 个答案:

答案 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();
}