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
相关产品推荐
相关产品推荐

