2015-05-22 2 views
1

Я написал sql-запрос, используя Laravel, но я не понимаю, почему создается ошибка! Коды приведены ниже,Laravel: Left join sql error

Джойн операции:

MeetingRoom::select('mr_id') 

    ->leftJoin('meetingroomhistory',function($join) 
    { 
     $join->on('country','=',Session::get('country'));   
     $join->on('location','=',Session::get('location')); 
     $join->on('building','=',Session::get('building')); 
     $join->on('floor','=',Session::get('floor')); 
     $join->on('name_of_mr','=',Session::get('room')); 
    }) 
    ->where('meetingroom.id','=','meetingroomhistory.mr_id') 
    ->get(); 

Ошибка:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Bangladesh' in 
'on clause' (SQL: select `mr_id` from `meetingroom` left join 
`meetingroomhistory` on `country` = `Bangladesh` and `location` = 
`Dhaka` and `building` = `Uttara` and `floor` = `3` and `name_of_mr` = 
`1` where `meetingroom`.`id` = meetingroomhistory.mr_id) 

Но если я выполнить запрос вручную изменить этот синтаксис `Bangladesh` для«Бангладеш»с использованием phpmyadmin, так что он работает хорошо и покажет мне результат. Пожалуйста, дайте мне знать, как я могу это исправить?

ответ

0

Я думаю, вы смутили часть и часть соединения.

$join->on($x, $y) заявления предназначены для соединения ваших таблиц. Оба $x и $y должны быть именами столбцов в ваших таблицах - вот почему Laravel добавляет к ним обратные ссылки.

$where() заявления предназначены для сравнения со значениями, которые вы поставляете. Ваши звонки Session::get() указывают, что это то, что вы делаете.

Предлагается переписать, но его, возможно, нужно настроить под ваши нужды.

MeetingRoom::select('mr_id') 
    ->leftJoin('meetingroomhistory', 'meetingroom.id', '=', 'meetingroomhistory.mr_id') 
    ->$where('meetingroom.country','=',Session::get('country')) 
    ->$where('meetingroom.location','=',Session::get('location')) 
    ->$where('meetingroom.building','=',Session::get('building')) 
    ->$where('meetingroom.floor','=',Session::get('floor')) 
    ->$where('meetingroom.name_of_mr','=',Session::get('room')) 
    ->get(); 

Я предположил, что страна, местоположение и т.д. столбцы являются частью таблицы meetingroom, если вы не можете просто изменить их $where('meetingroomhistory.country', ...) и так далее вместо этого.

Наконец, я не уверен, почему вы выбираете только одно значение, но, конечно, это зависит от вас. Если вам нужна только одна ячейка, вы можете использовать pluck(), и если вам нужно много результатов, вы можете сделать lists().

0

Я думаю, вы должны попробовать это.

MeetingRoom::select('mr_id') 
     ->join('meetingroomhistory', function($join) 
     { 
      $join->on('meetingroom.id','=','meetingroomhistory.mr_id') 
      ->where('meetingroomhistory.country','=',Session::get('country'));   
      ->where('meetingroomhistory.location','=',Session::get('location')); 
      ->where('meetingroomhistory.building','=',Session::get('building')); 
      ->where('meetingroomhistory.floor','=',Session::get('floor')); 
      ->where('meetingroomhistory.name_of_mr','=',Session::get('room')); 
     }) 
    ->get();