laravel多对多关系从数据透视表中获取数据

问题描述 投票:0回答:1

我在用户模型和教室模型之间有很多关系

这是结构:

- users
  - id
  - name

- classroom_user
   - classroom_id
   - user_id
   - is_teacher

- classrooms
  - id
  - name

这是关系:

用户模型:

public function classrooms() {
    return $this->belongsToMany(Classroom::class)->withPivot('is_teacher');
}

教室模式:

public function users() {
    return $this->belongsToMany(User::class)->withPivot('is_teacher');
}

public function teachers() {
    return $this->belongsToMany(User::class)->where('is_teacher','=',1);
}

public function students() {
    return $this->belongsToMany(User::class)->where('is_teacher','=',0);
}

我想通过获取is_teacher列的值来检查当前登录的用户是否是当前教室的老师。

当前正在以这种方式:

auth::user()->classrooms->find($classroom->id)->pivot->is_teacher

有更好的方法吗?

php laravel eloquent
1个回答
0
投票

为了避免出现这种情况,我只会这样做,以避免教室不存在:

$classroom = auth::user()->classrooms()->find($classroom->id);
if (! $classrooom) {
   // throw/return an error accordingly
} 
$isTeacher = $classrooom->pivot->is_teacher

PS:带括号的教室非常重要,否则,您将返回属于该用户的所有教室,并在PHP端进行过滤。

© www.soinside.com 2019 - 2024. All rights reserved.