Как поставить условие на пользовательский стол с условием на предметный стол - PullRequest
0 голосов
/ 08 апреля 2020

Необходимо найти запись с именем first_name таблицы User, равным ключевому слову, или тема объекта TeacherSubject соответствует ключевому слову, но значение 'step_completed' должно равняться '5', а значение 'is_approved' должно равняться '1' из таблицы User, даже если условие orwhereHas истинно.

$condition_array['radius'] = 25;
$condition_array['lat'] = $request->input('lat');
$condition_array['lng'] = $request->input('lng');
$condition_array['keyword'] = $request->input('keyword');
$sorting_type = $request->input('sorting_type');
$condition_array['filter'] = $request->input('filter');
if($sorting_type != ""){
    if($sorting_type == 0){
        $order_column = 'first_name';
        $order_order = 'DESC';
    }
    if($sorting_type == 1){
        $order_column = 'first_name';
        $order_order = 'ASC';
    }
}else{
    $order_column = 'id';
    $order_order = 'ASC';
}
$teachers = User::select('id','email','first_name','last_name','profile_picture','country_code','mobile')->with('teacherSubject')
    ->where(function($query) use($condition_array){
        $query->where(['step_completed'=>5,'is_approved'=>1]);
        $query->where(['first_name'=>$condition_array['keyword']]);
        $query->orWhereHas('teacherSubject', function ($query1) use($condition_array){
            $query1->where('subject',$condition_array['keyword']);
        });
    })
    ->orderBy($order_column,$order_order)
    ->get();

1 Ответ

0 голосов
/ 08 апреля 2020

Необходимо найти запись с именем first_name таблицы User, равным ключевому слову, или тема объекта TeacherSubject соответствует ключевому слову, но значение step_completed должно равняться 5, а значение is_approved должно равняться 1 от пользователя. таблицы, даже если условие orwhereHas истинно.

Так что, если бы я перевел ваше утверждение в запрос, я думаю, что оно должно выглядеть так:

$teachers = User
    ::select('id','email','first_name','last_name','profile_picture','country_code','mobile')
    ->with('teacherSubject')
    ->where(['first_name'=>$condition_array['keyword']])
    ->orWhere(function($query) use($condition_array) {
        $query->whereHas('teacherSubject', function($teacherQuery) use($condition_array) {
            $teacherQuery->where('subject',$condition_array['keyword']);              
        })
        ->where(['step_completed'=>5,'is_approved'=>1]);
    })
    ->orderBy($order_column,$order_order)
    ->get();

Таким образом, у вас есть 2 условия:

  • users.first_name == ключевое слово OR
  • teacher_subject_user_id == users.id AND teacher_subject.subject = ключевое слово AND users.step_completed == 5 AND is_approved == 1

Если любое из этих двух значений истинно, оно будет отображено в результате.

Пожалуйста, дайте мне знать, если оно работает:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...