2015-11-02 4 views
1

Как сделать этот запрос MySQL в Query Builder?Подзапрос Laravel 4.2 с использованием Query Builder

SELECT traction_instances.*, 
      (SELECT COUNT(station_id) 
       FROM traction_stations 
      WHERE traction_instances.instance_id = traction_stations.monitoring_instance) as `count stations` 
FROM traction_instances 

То, что я пытался до сих пор является следующее:

$instances = DB::connection('monitors')->table(DB::raw('traction_instances as ti, traction_stations as ts')) 
      ->select(array('ti.instance_id', 'ti.status', 'ti.cpu_usage', DB::raw('count(ts.station_id) as station_count'))) 
      ->where(DB::raw('ti.instance_id'), '=', DB::raw('ts.monitoring_instance')) 
      ->get(); 

С этим, я получаю одну строку «Instance» (и есть 4 из них) с кол «станций "экземпляр является мониторинг, но мне нужно все экземпляры, а если нет станций, что экземпляр является мониторинг, то station_count должен быть 0.

+0

Возможный дубликат [Как выбрать из подзапроса с помощью Laravel Query Builder?] (Http://stackoverflow.com/questions/24823915/how-to-select-from-subquery-using-laravel-query-builder) – Bogdan

+0

I Не уверен, что проблема такая же. Я также пробовал это '$ экземпляры = DB :: connection ('monitors') -> table ('traction_instances') -> select ('traction_instances. *', Function ($ query) { $ query- > selectRaw ('COUNT (*) FROM traction_stations WHERE traction_stations.monitoring_instance = traction_instances.instance_id');} ) -> получить() ' , но это дает мне' strtolower() ожидает параметр 1, чтобы быть строкой, объект given'. –

ответ

1

Найдено решение:

$instances = DB::connection('monitors')->table('traction_instances as ti') 
      ->where('ti.instance_type', 'Audio Stream Processor') 
      ->select(DB::raw('ti.*, (SELECT COUNT(*) FROM traction_stations AS ts WHERE ti.instance_id = ts.monitoring_instance) AS station_count')) 
      ->get();