Laravel中选择模型及关联模型指定列后标签不显示的解决方法
问题原因与解决方案
你遇到的问题是因为Laravel关联模型加载时需要依赖外键字段匹配关联关系,当前写法缺少了关键的外键字段,导致关联的tags无法正确关联到对应的article上。
正确写法示例
Controller 代码
$articles = Article::select(['id', 'title', 'created_at', 'body', 'slug']) // 必须包含Article的主键id,Tag关联依赖这个字段匹配外键 ->with(['tags' => function ($query) { $query->select('article_id', 'name'); // 必须包含Tag的关联外键article_id,确保能和Article的id对应上 }])->latest()->get();
关键说明
- 主模型(Article)的
select必须包含自身主键id:关联模型(Tag)需要通过这个主键匹配对应的外键(比如article_id),没有它Laravel找不到关联的对应关系。 - 关联模型(Tag)的
select必须包含关联外键article_id:这是Tag和Article建立关联的核心字段,缺少它的话,即使查了name字段,Laravel也不知道该把这个Tag分配给哪篇Article,自然加载不出数据。 - 如果后续需要对Tag做编辑、删除等操作,可以额外加上Tag的
id字段,仅用于展示的话保留article_id和name即可。
内容的提问来源于stack exchange,提问作者Alphy Gacheru
相关产品推荐
相关产品推荐

