2016-06-02 3 views
3

Я бы сгруппировал выбранную колонку на заказ. Без последних 3 символов из cars.name.laravel, подстрока в groupby()

$objects_collection = $objects_collection 
     ->groupBy("cars.name", "parts.part_catalog_id", "parts.colour_id") 
     ->select($this->getProperTableName(str_plural($this->getRoute())) . ".*", DB::raw("count(*) as quantity")) 
     ->paginate($paginate); 

Как это сделать?

Edit:

РЕШЕНИЕ является:

$objects_collection = $objects_collection 
     ->groupBy(DB::raw("SUBSTRING_INDEX(cars.name, '/', 1)"), "parts.part_catalog_id", "parts.colour_id") 
     ->select($this->getProperTableName(str_plural($this->getRoute())) . ".*", DB::raw("count(*) as quantity")) 
     ->paginate($paginate); 
+0

не уверен, что вы делаете, но groupBy может иметь обратный вызов https://laravel.com/docs/master/collections#method-groupby –

+0

эту работу по сборке, но я хочу сделать это в запросе к базе данных – gargi258

ответ

0

Вы пробовали что-то вроде (не тестировал)

$objects_collection = $objects_collection 
     ->groupBy(substr($objects_collection->cars.name, 0, -3), "parts.part_catalog_id", "parts.colour_id") 
     ->select($this->getProperTableName(str_plural($this->getRoute())) . ".*", DB::raw("count(*) as quantity")) 
     ->paginate($paginate); 
0

Если вы используете MySQL вы можете дать a):

$objects_collection = $objects_collection 
    ->groupBy("cars.name", "parts.part_catalog_id", "parts.colour_id") 
    ->select(DB::raw('SUBSTR(`cars.name`, 1, (LENGTH(`cars.name`)-3))'), $this->getProperTableName(str_plural($this->getRoute())) . ".*", DB::raw("count(*) as quantity")) 
    ->orderByRaw('1')' 
    ->paginate($paginate); 

Как вы сказали, что хотите orderBy.

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