1. 一对一关系
一对一是最简单的关联关系,表示表A和表B的记录一一对应,假设一个用户对应一个/角色,
如果有两个模型:User 和 Role他们是一对一的关系,
那么我们要使用 Eloquent 提供的一对一关系方法,表结构应该是这样的
users: id ... ... role_id
roles: id ... ... user_id
- 假设需要在 User 模型中查询对应的 roles表的信息,
/app/models/User.php
:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
public function hasOneRole()
{
return $this->hasOne('App\Models\Role','user_id', 'id');
}
}
$role = User::find(1)->hasOneRole;
在 User 类中,无论 hasOne 谁,
第二个参数都是 `user_id`,
第三个参数一般都是 `id`。
由于前面的 `find(1)`
已经锁定了 id = 1,所以这段函数对应的 SQL 为: `
select * from roles where user_id=1`。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected $table = 'roles';
public function hasOneUser()
{
return $this->belongsTo('App\Models\User', 'user_id', 'id');
}
}
2.一对多关系
- 一对多”关联是用于定义单个模型拥有多个其它模型的关联关系。例如,一篇博客文章拥有多条评论
- 假设一个用户对应多个/角色,
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
public function hasManyRoles()
{
return $this->hasMany('App\Models\Role','user_id', 'id');
}
}
$role = User::find(2)->hasManyRoles;
查找id为2的用户所属的角色
- belongsTo() 的用法跟上面一对一关系一样
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected $table = 'roles';
public function belongsToUser()
{
return $this->belongsTo('App\Models\User', 'user_id', 'id');
}
}
3.多对多