присоединиться с несколькими условиями в Laravel - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь объединить две таблицы, используя более одного условия. Следующий запрос не работает из-за второго условия соединения.

 $all_update = DB::table('posts as p')
      ->join('cprefs as c','p.qatype', '=', 'c.qatype')
      ->where('c.wwide', '=', 'p.wwide') //second join condition
      ->where('c.user_id', $u_id)
      ->where('p.arank', 1)
      ->get();

Ответы [ 2 ]

1 голос
/ 13 октября 2019

Функция where() ожидает, что последний параметр будет параметром, когда вы передаете имя столбца.
Для сравнения двух столбцов вы должны использовать метод whereColumn.

Имея это в виду, вы также можете написать свой код, как показано ниже:

$all_update = DB::table('posts as p') 
 ->join('cprefs as c','p.qatype', '=', 'c.qatype')
 ->whereColumn('c.wwide', '=', 'p.wwide') //second join condition
 ->where('c.user_id', $u_id) 
 ->where('p.arank', 1) 
 ->get();

Однако это будет толькоработать правильно, если соединение является INNER JOIN, что верно в вашем случае.
Правильный метод добавления нескольких предложений объединения:

$all_update = DB::table('posts as p') 
->join('cprefs as c', function($q) {
    $q->on('p.qatype', '=', 'c.qatype')
       ->on('c.wwide', '=', 'p.wwide'); //second join condition
}) 
->where('c.user_id', $u_id) 
->where('p.arank', 1) 
->get();

Просто используйте это.

0 голосов
/ 13 октября 2019

Вам нужно ключевое слово join, чтобы использовать условие множественного объединения. Независимо от таблицы.

 $all_update = DB::table('posts as p')
  ->join('cprefs as c','p.qatype', '=', 'c.qatype')
  ->join('cprefs as c2','p.wwide', '=', 'c2.wwide') //second join condition
  ->where('c.user_id', $u_id)
  ->where('p.arank', 1)
  ->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...