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即不传参数时,删除对应的所有关联
posted @ 2020-07-07 17:58  pine007  阅读(459)  评论(0编辑  收藏  举报