Eloquent:find() 和 where() 用法 laravel

新手上路,请多包涵

我正在尝试使用其 ID 从 posts 数据库表中获取记录。一段时间以来,我一直在研究 find() 方法,对它为什么不起作用感到困惑。这是我的查询,对我来说看起来正确但没有用:

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

我不情愿地这样做了:

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

令人惊讶的是,它起作用了,但我不知道如何。

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

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

原文由 Awa Melvine 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 789
2 个回答

您的代码看起来不错,但有几点需要注意:

Post::find($id); 作用于主键,如果您已将模型中的主键设置为 id 通过执行以下操作:

 protected  $primaryKey = 'slug';

然后 find 将改为按该键搜索。

Laravel 还期望 id 是一个整数,如果您使用的不是整数(例如字符串),则需要将模型上的增量属性设置为 false:

 public $incrementing = false;

原文由 craig_h 发布,翻译遵循 CC BY-SA 3.0 许可协议

未发现异常

有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。 findOrFailfirstOrFail 方法将检索查询的第一个结果。但是,如果没有找到结果,则会抛出 Illuminate\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);
});

原文由 Miqayel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题