Laravel Eloquent модели сложного запроса - PullRequest
0 голосов
/ 25 ноября 2018

Я вошел как первый ученик в таблице.Я хочу получить список всех студентов, которые находятся на том же отделении, что и мой, и к которым я еще не отправил запрос, используя модель 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 голосов
/ 25 ноября 2018

здесь у нас может быть два сценария

Первый:

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

здесь мы запрашиваем модель студента, собирая всех студентов на одном отделении сauth user .. затем проверяет те, у которых нет запросов.

Примечание: таблица запросов IF имеет идентификаторы отправителя и получателя, которые они ссылаются на таблицу студентов, вам нужно здесь, чтобы две функции сначала были связаныотправителю, второй для получателя.

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

второй сценарий - это только таблица запросов, которая относится к отправителю, в этом случае вам нужно получить студентов, которых вы уже отправилизапросы получают те, у кого нет запросов

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

Если честно, поля имен ваших таблиц немного неоднозначны, если это не решит вашу проблему, пожалуйста, объясните больше, что вам нужно.

Вы можете обратиться к документам Laravel Eloquent

0 голосов
/ 25 ноября 2018

Возможное решение

// 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 из зарегистрированных студентов.

...