Laravel雄辩的模型复杂查询

时间:2018-11-24 22:27:29

标签: php laravel eloquent laravel-5.6

我作为表格中的第一位学生登录。我想使用Eloquent模型检索与我属于同一部门并且尚未发送请求的所有学生的列表。

enter image description here

//Requestt.php
public function student()
{
    return $this->belongsto('App\Student','id', 'Sender_id','Rec_id');
}

//Student.php
public function requestts()
{
    return $this->hasMany('App\Requestt', 'id');
}

public function department()
{    
    return $this->belongsTo('App\Department');
}

注意:介意请求中的双“ t”。

2 个答案:

答案 0 :(得分:0)

可能的解决方案

// you may have the logged in student in your hand.
// for the example, I'll take the first.
$logged_in_student = Student::first();

$other_students = Student::where('department_id', $logged_in_student->department_id)
    ->whereDoesntHave('requestts', function($query) use($logged_in_student) {
        $query->where('Rec_id', $logged_in_student->id);
    })
    ->get();

说明

第一个where子句用于过滤同一部门的学生。
第二个whereDoesntHave子句用于从登录的学生中筛选出没有requestts的学生。

答案 1 :(得分:0)

在这里我们可能有两种情况

  

第一个:

Student::where('department_id', Auth::user()->department_id)->doesntHave('requestts')->get();

在这里,我们通过让所有学生和auth用户位于同一部门来查询学生模型。然后检查那些没有请求的学生。

  

注意:如果IF请求表具有发送者ID和接收者ID,   引用学生表,您首先需要具有两个功能   一个与发送者有关,第二个与接收者有关。

requests(){
    return $this->hasMany('App\Requestt', 'Rec_id');
}
  

第二种情况是requestts表,在此情况下,它仅引用发件人,您必须先获取已经发送请求的学生,然后再获取没有请求的学生

Student::where('department_id', Auth::user()->department_id)->whereNotIn('id', Student::requestts()->pluck('Sender_id'))->get();

说实话,您的表名字段有点模棱两可,如果不能解决您的问题,请进一步说明您的需求。

您可以参考laravel docs Eloquent