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

Lim*_*nte 48 laravel eloquent laravel-4 laravel-5

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

User::findOrFail(1);
Run Code Online (Sandbox Code Playgroud)

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

Page::findBySlugOrFail('about');
Run Code Online (Sandbox Code Playgroud)

Alu*_*tha 117

试试这样:

Page::where('slug', '=', 'about')->firstOrFail();
Run Code Online (Sandbox Code Playgroud)

  • `Page :: where('about','data') - > firstOrFail();`这应该适用于等于运算符'='不需要明确地说明 (11认同)
  • @Alupotha 你也可以做`Page::whereAbout('data')->firstOrFail();` (4认同)

Bur*_*aco 6

更新: 我目前正在使用 Laravel 6.9.0,并且我确认 @jeff-puckett 是正确的。Where 子句效果很好。这就是它在我的修补匠身上的工作原理。

>>> \App\Models\User::findOrFail('123b5545-5adc-4c59-9a27-00d035c1d212');
>>> App\Models\User
     id: "123b5545-5adc-4c59-9a27-00d035c1d212",
     name: "John",
     surname: "Graham",
     email: "john.graham@test.com",
     email_verified_at: "2020-01-03 16:01:53",
     created_at: "2020-01-03 16:01:59",
     updated_at: "2020-01-03 16:01:59",
     deleted_at: null,

>>> \App\Models\User::where('name', 'Buraco')->findOrFail('123b5545-5adc-4c59-9a27-00d035c1d212');
>>> Illuminate/Database/Eloquent/ModelNotFoundException with message 'No query results for model [App/Models/User] 123b5545-5adc-4c59-9a27-00d035c1d212'


>>> \App\Models\User::where('name', 'John')->findOrFail('123b5545-5adc-4c59-9a27-00d035c1d212');
>>> App\Models\User
     id: "123b5545-5adc-4c59-9a27-00d035c1d212",
     name: "John",
     surname: "Graham",
     email: "john.graham@test.com",
     email_verified_at: "2020-01-03 16:01:53",
     created_at: "2020-01-03 16:01:59",
     updated_at: "2020-01-03 16:01:59",
     deleted_at: null,
Run Code Online (Sandbox Code Playgroud)

过时:
至少花了两个小时才意识到,如果在Laravel 5.6中的 where() 之后链接firstOrFail()方法,它基本上会尝试检索表的第一条记录并删除where子句。所以在where之前调用firstOrFail。

Model::firstOrFail()->where('something', $value)
Run Code Online (Sandbox Code Playgroud)

  • 嗯,我想你一定还有其他问题。在 laravel v5.6.23 中,where 子句首先对我来说效果很好 (3认同)

小智 6

## 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();
Run Code Online (Sandbox Code Playgroud)