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

Laravel Eloquent:如何在User模型关联其管理的TrainingProgram?

解决方案

可以直接使用Laravel Eloquent提供的hasManyThrough关联来实现需求,这是专门为「通过中间模型关联到远层模型」的场景设计的,完全满足你不使用多次查询或原生SQL的要求。

在User模型中添加以下关联方法:

use Illuminate\Database\Eloquent\Relations\HasManyThrough;

public function managedTrainingPrograms(): HasManyThrough
{
    return $this->hasManyThrough(
        TrainingProgram::class,
        Business::class,
        'user_id',    // Business表中关联User的外键字段
        'business_id',// TrainingProgram表中关联Business的外键字段
        'id',         // User表的主键字段
        'id'          // Business表的主键字段
    );
}

关联参数说明

  • 第一个参数:最终要获取的目标模型TrainingProgram
  • 第二个参数:中间关联模型Business
  • 第三个参数:中间模型中指向当前模型(User)的外键
  • 第四个参数:目标模型中指向中间模型(Business)的外键
  • 第五个参数:当前模型的主键
  • 第六个参数:中间模型的主键

使用方式

调用这个关联即可直接获取用户作为管理员的所有培训项目,Eloquent会自动生成一次包含JOIN的高效查询:

$user = User::find(1);
$trainingPrograms = $user->managedTrainingPrograms;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:22:05