2015-02-22 4 views
0

У меня есть следующий запрос:Laravel Eloquent с помощью WHERE вместо И в Присоединяется

select i.name,i.id itemId,its.item_id from items i 
LEFT JOIN items_subscribers its 
ON i.id = its.item_id 
and its.user_id = 1 

который я преобразованный в красноречивых Путь, как это:

$records = Item::where('items_subscribers.user_id',$user_id) 
      ->leftJoin('items_subscribers','items.id','=','items_subscribers.item_id') 
      ->select(['items.name','items.id','items_subscribers.item_id as selected_item_id'])->get(); 

Когда я бегу print_r(DB::getQueryLog()); печатает следующий запрос:

select `items`.`name`, `items`.`id`, `items_subscribers`.`item_id` as `selected_item_id` from `items` left join `items_subscribers` on `items`.`id` = `items_subscribers`.`item_id` where `items_subscribers`.`user_id` = ? 

Запрос ничего не дает. Я хочу использовать AND вместо WHERE. Как я это сделал?

Я использую Laravel 4.2

ответ

1

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

$records = Item::leftJoin('item_subscribers', function($join) use ($user_id){ 
     $join->on('items.id','=','items_subscribers.item_id'); 
     $join->where('items_subscribers.user_id', '=', $user_id); 
    }) 
    ->select(['items.name','items.id','items_subscribers.item_id as selected_item_id']) 
    ->get(); 
+0

Perfect. Просто интересно, почему «andWhere» не может работать, и все равно нужно называть закрытие? – Volatil3

+1

Ну, 'where()' внутри закрытия соединения - это другое 'where()', чем внешнее. «Join-where» добавит дополнительное предложение 'on', но использует привязку для значения. Если вы будете использовать 'on()' дважды, он будет искать столбец с именем '1' (' $ user_id'). Надеюсь, что объяснение поможет;) – lukasgeiter

+0

Странная проблема. Я не могу получить доступ к столбцам таблицы JOINed 'items_subscribers'. Результат показан здесь: http://pastebin.com/i4mk7P0z – Volatil3

0

Просто добавьте еще один on метод в leftJoin части вместо того, чтобы использовать метод where. - https://stackoverflow.com/a/26714765/3208719

+0

делает это дает эту ошибку в настоящее время 'Database [items_subscribers.user_id] не configured.' – Volatil3