Есть ли лучший способ присоединить запрос в laravel eloquent.? - PullRequest
0 голосов
/ 14 февраля 2020

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

Integrity constraint violation: 1052 Column 'gender' in where clause is ambiguous (SQL: select count(*) as aggregate from `users_details` right join `users` on `users_details`.`user_id` = `users`.`id` where `gender` LIKE female and `matrimonial` LIKE 1)

мой код для запроса следующий.

 public function bride(){

    $query = app(UserDetail::class)->newQuery(); 
    $query= $query->where('gender','LIKE','female');
    $query= $query->where('matrimonial','LIKE','1');
    $query = $query->rightJoin('users','users_details.user_id','=','users.id');
    $request = request();
      if(request()->exists('sort')){
        $sorts = explode(',',request()->sort);
        foreach ($sorts as $sort){
            list($sortCol, $sortDir) = explode('|',$sort);
            $query = $query->orderBy($sortCol,$sortDir);
         } 
    } 
     else { 
            $query = $query->orderBy('id','asc');
        }
  if($request->exists('filter')) {
      $query->where(function($q) use($request){
        $value = "%{$request->filter}%";
        $q->where('name','like',$value)
              ->orWhere('father_name','like',$value)
              ->orWhere('city','like',$value)
              ->orWhere('mother_name','like',$value); 
      });
  }
  $per_page = request()->has('per_page')?(int) request()->per_page : null;
  $pagination = $query->paginate($per_page);
  $pagination->appends([
      'sort'=>request()->sort,
      'filter'=>request()->filter,
      'per_page'=>request()->per_page
  ]);

    return response()->json(
        $pagination
    )
    ->header('Access-Control-Allow-Origin','*')
    ->header('Access-Control-Allow-Methods','GET');
}

Что я должен сделать, чтобы получить результат. Спасибо

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Поскольку в ваших таблицах одинаковое имя столбца (gender в user_details и users), вам необходимо указать имя таблицы в столбце, чтобы mysql мог найти для вас истинный столбец,

как это:

    $query= $query->where('user_details.gender','LIKE','female');
0 голосов
/ 14 февраля 2020

SQL не знает, о какой таблице вы говорите, когда используете Joins - если вы не укажете имена таблиц для каждого столбца, упомянутого в запросе.

Заменить эти строки:

$query= $query->where('gender','LIKE','female');
$query= $query->where('matrimonial','LIKE','1');

этими строками:

$query= $query->where('users_details.gender','LIKE','female');
$query= $query->where('users_details.matrimonial','LIKE','1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...