You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何通过多模型获取层级关联数据?

正确的层级关联查询实现方案

问题分析

你的查询错误在于直接尝试给FoodSection加载foodItem和alergen关联,但这两个关联并不直接属于FoodSection,而是嵌套在foodCategory之下的层级关联,需要使用嵌套预加载语法来实现完整层级的关联数据获取。

正确的查询语句

使用Laravel的点式嵌套预加载语法,就能一次性获取包含完整层级结构的$menu对象:

$menu = FoodSection::withTrashed()
    ->with('foodCategory.foodItem.alergen')
    ->get();

这个语句会按以下层级加载数据:

  • 所有包含软删除的FoodSection
  • 每个FoodSection对应的全部FoodCategory
  • 每个FoodCategory对应的全部FoodItem
  • 每个FoodItem对应的全部Alergen

模型关联修正提示

注意到你的Alergen模型中,foodItem关联定义为belongsToMany,但FoodItem中对应的关联是hasMany(Alergen::class),二者不匹配:

  • 如果是一对多关系(一个FoodItem对应多个Alergen),需将Alergen的关联改为:
public function foodItem()
{
    return $this->belongsTo(FoodItem::class);
}
  • 如果是多对多关系,需将FoodItem的关联改为belongsToMany(Alergen::class),同时创建中间表alergen_food_item。

请根据实际业务逻辑修正关联定义,否则预加载alergen会出现数据错误。

内容的提问来源于stack exchange,提问作者Janjac

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 07:51:34