2014-11-04 5 views
0

Я хочу запросить сразу три отдельных таблицы. Основным является Criteria, две таблицы has Many, связанные criteria_id: Bedrooms и Properties.Laravel - Query 3 таблицы на основе отношений

Criteria может иметь много Bedrooms и многие Properties:

Screenshot

Критерии Модель

public function bedrooms() 
{ 
    return $this->hasMany('Bedroom'); 
} 

public function properties() 
{ 
    return $this->hasMany('Property'); 
} 

Я уверен, если это возможно, но я хочу, чтобы запросить оба эти таблицы, а также Criteria, чтобы узнать, какие критерии имеют определенную спальню и определенный тип собственности. Обратите внимание, что для каждого критерия_ид может быть несколько спален и свойств.

До сих пор мой запрос:

$criterias = Criteria::select('id') 
     ->where('min', '<=', Input::get('single_value')) 
     ->lists('id'); 

Мое единственное логическое объяснение -

Получить все критерии, где Min < = Значение и Criteria.Bedrooms = 1 и Criteria.Properties = 5.

Как бы пройти и просмотреть, есть ли у критерия спальня/свойство с сохраненным значением.

Большое спасибо за помощь.

ответ

1

Если вы ищете только критерии, которые отвечают вашим ограничениям, вы можете использовать whereHas() на спальню и имущественных отношений. Затем добавьте where() и lists().

$bedroom_id = '1'; 
$property_id = '5'; 

$criteria = Criteria::whereHas('bedrooms', function($q) use ($bedroom_id) { 
    $q->where('bedroom', $bedroom_id); 
})->whereHas('properties', function($q) use ($property_id) { 
    $q->where('property', $property_id); 
})->where('min', '<=', Input::get('single_value'))->lists('id'); 

Criteria.Bedrooms = 1 and Criteria.Properties = 5 был немного расплывчато, но я добавил его в том, где они должны идти. Я предполагаю, что вы на самом деле означали id1 и 5 соответственно, поэтому он получал бы все критерии, имеющие как спальню id 1, так и свойство id 5.

+0

большое спасибо за вашу помощь, это сработало отлично. – Ben

0

Попробуйте Eager Loading отношения

$criterias = Criteria::with('bedrooms', 'properties') 
      ->where('min', '<=', Input::get('single_value')) 
      ->lists('id'); 
+0

Я хочу запросить таблицы спальни и свойств, хотя , Если критерии имеют 1 спальню и собственность 5, например. Я должен был бы снова запросить это? – Ben

+0

Я думаю, что ответ пользователя3158900 - это то, что вы ищете ... – lukasgeiter

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