雄辩:find() and where() usage laravel

2022-08-30 09:20:28

我正在尝试使用其id从数据库表中获取记录。我已经在find()方法上敲了很长一段时间了,对为什么它不起作用感到困惑。这是我的查询,对我来说看起来是正确的,但不起作用:posts

$post = Post::find($id);
$post->delete();

我不情愿地做了这个:

$post = Post::where('id', $id);
$post->delete();

令人惊讶的是,它有效,但我不知道如何。

我也知道不像,是一个查询生成器,所以我也可以像这样使用它:find()where()Post::where('id', $id)->first()

关于这些方法工作方式的差异有什么想法吗?


答案 1

您的代码看起来很好,但有几件事需要注意:

Post::find($id);对主键执行操作,如果已将模型中的主键设置为其他操作,而不是通过执行以下操作:id

protected  $primaryKey = 'slug';

然后按该键进行搜索。find

Laravel 还期望 是整数,如果您使用的是整数以外的其他值(例如字符串),则需要将模型上的递增属性设置为 false:id

public $incrementing = false;

答案 2

未找到异常

有时,如果找不到模型,您可能希望引发异常。这在路由或控制器中特别有用。和 方法将检索查询的第一个结果。但是,如果未找到任何结果,则将抛出 a:findOrFailfirstOrFailIlluminate\Database\Eloquent\ModelNotFoundException

$model = App\Flight::findOrFail(1);

$model = App\Flight::where('legs', '>', 100)->firstOrFail();

如果未捕获异常,则会自动将 404 HTTP 响应发送回用户。使用这些方法时,不必编写显式检查来返回 404 响应:

Route::get('/api/flights/{id}', function ($id) {
    return App\Flight::findOrFail($id);
});

推荐