Laravel Eloquent—模型间关系(关联)

本文介绍了Eloquent ORM中的一对一、一对多及多对多关联关系的实现方法,包括如何定义关联关系、如何查询相关联的数据以及如何指定外键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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`。
  • 对应的,如果使用 belongsTo() 关系
<?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.多对多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值