需要多个字段才能确定对应关系模型关联要怎么写呢?

请假一个问题,
简单的模型关联的foreign_key和local_key都是只有一个字段,

return $this->hasOne(User::class, 'foreign_key', 'local_key');

但是现在接手的数据库里面,有的表没有设计冗余id,需要多个字段一一对应才能确定关联关系,每次写leftjoin添加条件去查询又太麻烦,导致不同的控制器有大量重复代码, 现在想在不去改表结构添加字段的情况下,多字段关联的模型关联需要怎么写呀?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

查询作用域 是否符合你的需求。

3年前 评论
SinceJuly (楼主) 3年前
24K大白羊 (作者) 3年前
讨论数量: 6

正确做法肯定是要有个单一外键的,但针对你这个需求,我想到一个妖路子。 你可以写两个关联,假如 nameage 确定另一个表的一条数据,那么你在查询时可以用 whereHas('name') 和 whereHas('age') 来检索,不过with() 加载的时候就不能用了 :sweat_smile: (这个方案我没有去验证,嘿嘿)

3年前 评论
SinceJuly (楼主) 3年前

新增字段 model_type 标记对应model,通过反射函数实现对应函数调用

3年前 评论
SinceJuly (楼主) 3年前

当时没有找到对应方法。只能直接连表了

3年前 评论
SinceJuly (楼主) 3年前
66
return $this->hasMany(User::class, 'user_id', 'id')->where();

额没试过 不知道可不可行你可以试试
或者

$model->with([
'hasMany'=>function($query){
return $query->where();
},])
3年前 评论
SinceJuly (楼主) 3年前

看到你的 id 我想到一个武神 :smiley:

3年前 评论
SinceJuly (楼主) 3年前

查询作用域 是否符合你的需求。

3年前 评论
SinceJuly (楼主) 3年前
24K大白羊 (作者) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!