在Eloquent中配置projects、jobs、categories表关联实现指定查询问题
关联关系配置方案
以下以最常用的Laravel Eloquent ORM为例给出配置方案,其他ORM框架核心逻辑一致,均为配置多对多关联并指定jobs为中间关联表即可:
1. Project模型关联配置
首先在Project模型中定义对应关联:
class Project extends Model { // 定义Project与Job的一对多基础关联 public function jobs() { return $this->hasMany(Jobs::class); } // 定义Project与Category的多对多关联,通过jobs中间表跳转 public function categories() { // 若jobs表中外键名不是默认的project_id、category_id,可按顺序补充第3、4个参数手动指定外键 return $this->belongsToMany(Category::class, 'jobs'); } }
需要传入分类ID查询对应项目时,使用whereHas方法过滤即可:
// $categoryId为传入的目标分类ID $targetProjects = Project::whereHas('categories', function ($query) use ($categoryId) { $query->where('id', $categoryId); })->get();
2. Category模型关联配置
在Category模型中定义关联后即可直接查询关联项目:
class Category extends Model { // 定义Category与Job的一对多基础关联 public function jobs() { return $this->hasMany(Jobs::class); } // 定义Category与Project的多对多关联,通过jobs中间表跳转 public function projects() { return $this->belongsToMany(Project::class, 'jobs'); } }
配置完成后直接调用关联属性即可拿到指定分类下的所有项目:
// 获取ID为$categoryId的分类下所有关联项目 $projects = Category::find($categoryId)->projects;
内容的提问来源于stack exchange,提问作者Interact
相关产品推荐
相关产品推荐

