В Laravel 5.6.12 в конструктор запросов была добавлена функция fromSub()
, которая делает то, что вы пытаетесь сделать.
Не проверено, но я думаю, что ваша функция будет выглядеть примерно так:
public function getTotal($query = null)
{
if (is_null($query)) {
return $this->total;
}
return \DB::connection('sqlsrv')
->selectRaw('count(*) as total_count')
->fromSub($query)
->value('total_count');
}
Если вы еще не используете 5.6.12, ваш конкретный запрос может быть полностью обработан с помощью оператора selectRaw
, который принимает привязки в качестве второго параметра. В этом случае ваша функция будет выглядеть примерно так:
public function getTotal($query = null)
{
if (is_null($query)) {
return $this->total;
}
return \DB::connection('sqlsrv')
->selectRaw('count(*) as total_count from ('.$query->toSql().') as count_table', $query->getBindings())
->value('total_count');
}
Примечание: если вы еще не видели его, функция value()
выполняет запрос, получает первую строку, а затем получает значение указанного столбца из этой первой строки. Просто немного чище, чем использовать get()
или first()
и затем получить доступ к свойству.