Как реализовать отношения, в которых красноречиво условие Laravel? - PullRequest
1 голос
/ 07 апреля 2020

У меня есть две таблицы:

  1. Ученики
  2. Результаты

У этих двух таблиц есть отношение один к маю.

Student model:

public function results()
    {
        return $this->hasMany('App\Result');
    }
Result model:

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

В таблице учеников у меня есть поле с именем average_score.

Как выполнить следующий запрос, он не работает, он говорит «Неопределенное свойство: Illuminate \ Database \ Query \ Builder: : $ student ":

$data = Result::with('student')->where('score', '>=', function($q){
        $average_score = $q->student->average_score;

        return $average_score;
})->get();

Чтобы получить результаты, которые только выше или равны« average_score ».

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Вы можете использовать whereHas, чтобы найти эти результаты:

$data = Result::with('student')->whereHas('student', function($q) {
    $q->whereColumn('average_score', '<=', 'Results.score');
})->get();
1 голос
/ 07 апреля 2020

Если score и average_score являются столбцами одной и той же таблицы (student), попробуйте это;

$data = Result::with(['student' => function ($query) {
        $query->whereColumn('score', '>=', 'average_score');
    }])->get();

Если score и average_score являются столбцами разных таблиц, попробуйте это;

$data = Result::with('student')->whereHas('student', function($q) {
        $q->whereColumn('students.average_score', '<=', 'results.score');
    })->get();
0 голосов
/ 07 апреля 2020

получить значение из столбца Results.average_score, затем сравнить с student.score:

Result::with([
        'student' => function($query) {
            $query->where("score",">=", "Results.average_score"););
        }
    ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...