伊春网帮你
larave5.1\5.2 多对多关系的使用教程
时间:2016-06-04 14:38:26 浏览:518

larave5.1\5.2 多对多关系的使用教程

在笔者开始对arave5.1\5.2 多对多关系使用用先郑重说明一下,如有说的不足之处,还请谅解。


前面说了一对一和一对多的关系,这个相信大家都能理解。理解起来不是很难

多对多呢?也不是很难,但我看官方的感觉有点困难!

先看官方的:

多对多关系比hasOne和hasMany关联关系要稍微复杂一些。这种关联关系的一个例子就是一个用户有多个角色,同时一个角色被多个用户共用。例如,很多用户可能都有一个“Admin”角色。要定义这样的关联关系,需要三个数据表:users、roles和role_user,role_user表按照关联模型名的字母顺序命名,并且包含user_id和role_id两个列。


多对多关联通过编写一个调用Eloquent基类上的belongsToMany方法的函数来定义:



namespace App;


use Illuminate\Database\Eloquent\Model;


class User extends Model{

   /**

    * 用户角色

    */

   public function roles()

   {

       return $this->belongsToMany('App\Role');

   }

}

关联关系被定义之后,可以使用动态属性roles来访问用户的角色:


$user = App\User::find(1);


foreach ($user->roles as $role) {

   //

}

当然,和所有其它关联关系类型一样,你可以调用roles方法来添加条件约束到关联查询上:


$roles = App\User::find(1)->roles()->orderBy('name')->get();

正如前面所提到的,为了决定关联关系连接表的表名,Eloquent以字母顺序连接两个关联模型的名字。然而,你可以重写这种约定——通过传递第二个参数到belongsToMany方法:


return $this->belongsToMany('App\Role', 'user_roles');

除了自定义连接表的表名,你还可以通过传递额外参数到belongsToMany方法来自定义该表中字段的列名。第三个参数是你定义的关系模型的外键名称,第四个参数你要连接到的模型的外键名称:


return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');

上面官方的以用户角色为例说得详细,但是我们就是不知从何下手.

多对多的关系函数就是这个>belongsToMany他的正向和反向都用这个belongsToMany方法.

前面也说过了一对一和一对多的我还是以用户手机为例:

假设公司有多个手机和多名员工,某个手机的工能也不一样.而任意一个或多个手机他可以给一个任意一人员工用,任意一个或多个员工也可以用不同的手机做他想做的事。这就是多对多.

正向

注:在使用看前先要有一张中间表,而且表名是两个表的名用下划线连起来,user_phone,不要加s,模型对应表中有两个user_id/phone_id的字段,就是通过这user_id/phone_id字段取得用户和手机的关系.




namespace App;


use Illuminate\Database\Eloquent\Model;


class User extends Model{

  /**

   * 获取关联到用户的手机

   */

  public function phones()

  {

      return $this->belongsToMany('App\Phone');

  }

}

反向



namespace App;


use Illuminate\Database\Eloquent\Model;


class Phone extends Model{

  /**

   * 获取手机对应的用户

   */

  public function users()

  {

      return $this->belongsToMany('App\User');

  }

}

a.新增用户手机


$user->phones()->sync(Phone::create($request->all()));

备注:sync()中可以是数组,

这样就为当前id的用户新增了一个手机

b.查询用户的所有手机.


foreach(User::find($id)->phone as $phones){

$phones->name

}

c,不让用户拥有其中一台手机,如支持打游戏的,哈哈

$user->phones()->detach($id);

备注:$id是你给定的手机的id

到这larave5.1\5.2 对对多关系的使用讲解就完了,如果你觉得还行和话,转发此链接给更多的朋友,谢谢!



[上一篇]MySQL存储过程(不用脚本语言调度
[下一篇]larave5.1\5.2一对一和一对多的关
Copyright 2025 © wbnsp.com.cn 网帮你

2025 © 版权所有 红花岗区网帮你信息技术工作室

工信部备案号:黔ICP备2025055589号-1

请使用网帮你微信扫码登录