запрос Laravel с модельной функцией - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть эта функция в моей модели:

 public function isFull(){
        $maxMembers=$this->course->type->max_members;
        $countActualMembers=LessonLicenseMember::where('lesson_id',$this->id)->count();
        if( $countActualMembers < $maxMembers) {
            return false;
        }
        else{
            return true;
        }
    }

Возможно ли использовать ее в запросе laravel, как этот?

 public function getOpenLessonsInCourses($licenseMemberId)
    {
        $lessons =Lesson::select ('lessons.id as idLesson','courses.id as id','course_type.description as description'
            ,'lessons.number as number','lessons.date_time as date_time')
            ->status('aperto')
            ->concluded(false)
            ->join('courses','lessons.course_id','courses.id')
            ->join('course_type','courses.course_type_id','course_type.id')
            ->get();
        return $lessons;
    }

Цель состоит в том, чтобы уроки, которыене заполнены, но у меня нет поля в моей таблице.Я знаю, что есть области, но я думаю, что они работают только с полями в таблице ...

Ответы [ 2 ]

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

Посмотрите на условные предложения:

https://laravel.com/docs/5.7/queries#conditional-clauses

Синтаксис будет выглядеть примерно так:

// find your lesson so you can use the isFull method
$lesson = Lesson::find(1);

$lessons = Lesson::select ('lessons.id as idLesson','courses.id as id','course_type.description as description','lessons.number as number','lessons.date_time as date_time')
   ->status('aperto')
   ->concluded(false)
   ->join('courses','lessons.course_id','courses.id')
   ->join('course_type','courses.course_type_id','course_type.id')
   ->when($lesson->isFull(), function ($query, $lesson) {
       // return your query object here
   })
   ->get();

return $lessons;
0 голосов
/ 28 ноября 2018

Используя вашу существующую функцию, единственный способ заставить ее работать, это сначала получить все уроки, затем отфильтровать эту коллекцию, чтобы увидеть, какие из них не заполнены, а затем использовать whereIn для фильтрации вашего запроса в контроллере.Это было бы что-то вроде этого.

public function getOpenLessonsInCourses($licenseMemberId)
{
    $openLessons = Lesson::all()->filter(function ($lesson, $key) {
        return !$lesson->isFull();
    });

    $lessons = Lesson::whereIn('id', $openLessons->pluck('id')->all())
        ->select ('lessons.id as idLesson','courses.id as id','course_type.description as description'
        ,'lessons.number as number','lessons.date_time as date_time')
        ->status('aperto')
        ->concluded(false)
        ->join('courses','lessons.course_id','courses.id')
        ->join('course_type','courses.course_type_id','course_type.id')
        ->get();
    return $lessons;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...