Laravel 8 模型结构

2021-07-19 11:34 更新

多对多关联通过调用 belongsToMany 这个内部方法返回的结果来定义,例如,我们在 User 模型中定义 roles 方法:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 用户拥有的角色
     */
    public function roles()
    {
        return $this->belongsToMany('App\Models\Role');
    }
} 

一旦关联关系被定义后,你可以通过 roles「动态属性」获取用户角色:

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

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

当然,像其它所有关联模型一样,你可以使用 roles 方法,利用链式调用对查询语句添加约束条件:

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

正如前面所提到的,为了确定关联连接表的表名,Eloquent 会按照字母顺序连接两个关联模型的名字。当然,你也可以不使用这种约定,传递第二个参数到 belongsToMany 方法即可:

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

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

return $this->belongsToMany('App\Models\Role', 'role_user', 'user_id', 'role_id'); 
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号