laravel 关联模型关系
laravel 关联模型关系
一对一
方法
copyhasOne('关联模型','外键','主键') #拥有
belongsTo('关联模型','外键','主键') #属于
从字面理解
-
外键:文章(cid)
文章<分类
1篇文章属于1个分类:article -> belongsTo('category','cid');
1个分类拥有1篇文章:category -> hasOne('article','cid')
-
外键:订单(goods_id)
订单>商品
1个订单拥有1个商品:order -> hasOne('address','goods_id');
1个商品属于1个订单:goods -> belongsTo('order','goods_id');
一对多
方法
copyhasMany('关联模型','外键','主键') #拥有
belongsTo('关联模型','外键','主键') #属于
从字面理解
-
外键:文章(cid)
文章<分类
1篇文章属于1个分类:article -> belongsTo('category','cid');
1个分类拥有多篇文章:category -> hasMany('article','cid')
-
外键:订单(goods_id)
订单>商品
1个订单拥有多个商品:order -> hasMany('address','goods_id');
1个商品属于1个订单:goods -> belongsTo('order','goods_id');
多对多
方法
copybelongsToMany('关联模型', '中间表名', '中间表对应当前模型的外键', '中间表对应关联模型的外键');
从字面理解
-
关系
1个用户拥有多个角色
1角色也属于多个用户 -
表
user(id,name)
role(id,name)
user_role(id,user_id,role_id) -
model
user:belongsToMany('App\Role','role_user','user_id','role_id');
role:belongsToMany('App\User','role_user','role_id','user_id');
查询关联
copyUser::find(1)->roles()->get();
User::find(1)->with('roles')->get();
添加关联
copy$user = User::find(1);
$user->roles()->attach(2,['created_at'=>'2020-07-07 16:43:35']);
//attach('中间表对应关联模型的外键,即role_id',[中间表字段赋值])
//结果:user_role新增记录[user_id=1,role_id=2,created_at='2020-07-07 16:43:35']
同步关联
copy$user = User::find(1);
$user->roles()->sync([1,3]);
//sync(),等同于,新增或保留1,3,删除其他
删除关联
copy$user = User::find(1);
$user->roles()->detach([1,3]);
//detach($roleIds); $roleIds: 数组,要删除的id
// 为null即不传参数时,删除对应的所有关联
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构