2015-03-18 2 views
1

У меня такое ощущение, что это легко, но я не могу найти решение.Создайте «базовый» запрос, queryBuilder

Мне нужно создавать запросы из многих таблиц, но у многих из них есть одна общая таблица с тем же условием для этой таблицы, у меня была «большая» идея создать как «базовый запрос». это пример.

$baseQuery = DB:: ('table')->where ('condition_in_common', 1); 

$bar = $baseQuery->join ('bar', 'table_id', '=', 'table.id') 
    ->where (myOwnConditions); 

$foo = $baseQuery->join ('foo', 'table_id', '=', 'table.id') 
    ->where (myOwnConditions); 

Что я ожидаю иметь 2 запросов, один для таблицы «бар», а другой для «Foo»

select * from `table` inner join `bar` on `table`.`id` = `table_id` where condition_in_commom = 1 and myOwnConditions; 

select * from `table` inner join `foo` on `table`.`id` = `table_id` where condition_in_commom = 1 and myOwnConditions; 

Но это не работает так.

ответ

0

Вы можете сделать это, но вы должны clone запрос или вы всегда будете работать с тем же экземпляром класса строитель:

$baseQuery = DB::table('table')->where('condition_in_common', 1); 

$barQuery = clone $baseQuery; 
$fooQuery = clone $fooQuery; 

$bar = $barQuery->join('bar', 'table_id', '=', 'table.id') 
       ->where(myOwnConditions) 
       ->get(); 

$foo = $fooQuery->join('foo', 'table_id', '=', 'table.id') 
       ->where(myOwnConditions) 
       ->get(); 
+0

Я предполагаю, что это будет работать, спасибо. Я проверю, как только смогу. – user3369524

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