laravel 关联模型关系
laravel 关联模型关系
一对一
方法
hasOne('关联模型','外键','主键') #拥有
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');
一对多
方法
hasMany('关联模型','外键','主键') #拥有
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');
多对多
方法
belongsToMany('关联模型', '中间表名', '中间表对应当前模型的外键', '中间表对应关联模型的外键');
从字面理解
-
关系
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');
查询关联
User::find(1)->roles()->get();
User::find(1)->with('roles')->get();
添加关联
$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']
同步关联
$user = User::find(1);
$user->roles()->sync([1,3]);
//sync(),等同于,新增或保留1,3,删除其他
删除关联
$user = User::find(1);
$user->roles()->detach([1,3]);
//detach($roleIds); $roleIds: 数组,要删除的id
// 为null即不传参数时,删除对应的所有关联