Laravel路由模型绑定:指定字段及关联却返回全部帖子问题
问题解决:Laravel路由模型绑定返回指定单条帖子数据
你的问题出在控制器中错误调用了get()方法——路由模型绑定已经帮你把对应ID的Post实例注入到$post参数里了,而get()会触发新的全量查询,导致返回所有帖子。
修正后的控制器代码
public function show(Post $post) { $postData = $post->load(['author' => function($query) { // 必须包含关联外键post_id,否则Laravel无法关联对应作者数据 $query->select('id', 'post_id', 'name'); }]) // 筛选需要返回的字段,包含关联的author ->only(['title', 'desc', 'created_date', 'author']) ->toArray(); return $postData; }
关键说明
- 移除
get()方法:$post已经是路由匹配到的单个Post模型实例,get()是用于查询数据集的方法,会重新拉取所有帖子数据,这是核心问题。 - 关联查询需包含外键:在author的查询闭包里,必须选中
post_id(关联外键),否则Laravel无法将作者数据和当前帖子关联,会返回null。 - 字段筛选用
only():通过only()方法指定需要返回的字段,确保结果只包含你需要的数据。
内容的提问来源于stack exchange,提问作者mmdev
相关产品推荐
相关产品推荐

