2014-09-25 3 views
0

Я пытаюсь получить «отзывы» из моей базы данных, где пользователь из МХ (например), так что, у меня есть это:Laravel4, жадная загрузка не работает

Review::with(array('user' => function($query) 
{ 
    $query->where('country_code', '=', 'MX'); 
})) 
->with('user.country','pictures') 
->where('shop_id',Input::get('id')) 
->orderBy('id','DESC')) 
->get() 
->toArray() 

Но, кажется, как где ('country_code', '=', 'MX') не учитывается, потому что извлекает все отзывы, и мне просто нужны отзывы, написанные пользователем из MX.

  • пользователя и картина внутри с являются функциями в пределах моей модели пользователя
  • country_code это поле из таблицы пользователей

Цель: Просто получить отзывы, написанные пользователь из указанной страны и тестировал что-то вроде этого:

Review::where('shop_id',Input::get('id')) 
->with('user.country','pictures') 
->where('users.country_code','MX') 
->orderBy('id','DESC')) 
->get() 
->toArray() 

Но не работает, потому что говорит: Unknow column users.country_code где ....

ответ

0

Вы хотите сделать запрос, который фильтрует на основе отношения. Нежелательные ограничения загрузки ограничивают записи, которые входят в ваш основной набор результатов.

Review::whereHas('users', function ($q) 
{ 
    $q->where('country_code', 'MX'); 
}) 
->with('user','pictures') 
->where('shop_id',Input::get('id')) 
->orderBy('id','DESC')) 
->get(); 

В whereHas говорит ... дайте мне только обзоры, которые имеют пользователя с country_code=MX.

Ссылка

Laravel Docs - Eloquent - Querying Relations

+0

Это правда, работает сейчас .. просто изменить whereHas («» пользователей к whereHas («пользователь» ... Спасибо :) – SoldierCorp

+0

может сделать обзор более чем 1 пользователь – lagbox

+0

Не просто 1 пользователь, а «пользователь» whereHas - это имя функции в моей модели отзыва. – SoldierCorp

0

Если вы хотите отзывы, написанные определенным пользователем или группой пользователей, вы не хотите использовать жадную загрузку. Попробуйте это:

Review::with(array('user', 'pictures')) 
    ->join('users', 'reviews.user_id', '=', 'users.id) 
    ->where('users.country_code', '=', 'MX') 
    ->where('reviews.shop_id', Input::get('id')) 
    ->orderBy('reviews.id', 'DESC')) 
    ->get(); 
+0

Спасибо, но я не использую соединения напрямую, вместо этого я использую отношения с моделями. – SoldierCorp

Смежные вопросы