У меня есть модель под названием Product
. Product
помимо прочего имеет цену, категорию и дату создания.
Я хочу показать таблицу, показывающую среднюю цену и средний возраст по категориям во многих местах. Иногда мне нужна только одна категория, иногда все, иногда только товары, которые были в наличии более определенного времени и т. д.
На данный момент я использую Laravel Query Builder для генерации этих чисел в моем контроллере, а затем передаю их в представление.
Чтобы попытаться повторно использовать его, у меня есть это в методах, прежде чем мне это понадобится:
$product_averages_base_query = DB::table('products')
->leftJoin('categories', 'products.MakeDescription', '=', 'categories.id')
->select(
DB::raw('count(products.id) as TotalNumber'),
DB::raw('AVG(Datediff("'.date('Y-m-d').'",products.created)) as AvgDaysInStock'),
DB::raw('AVG(Price) as AvgPrice')
);
Затем, когда для конкретного случая использования я использую:
$averages = $product_averages_base_query->where('categories.name', '=', 'Example 1')->get();
или любой другой вариант.
Это кажется действительно «неправильным», потому что я, конечно, в конечном итоге копирую этот код повсюду.
Как мне представить эти данные таким образом, чтобы мне было легче их повторно использовать? Должен ли я иметь класс? Как он должен называться и что в нем?
Должен ли я как-то иметь модель?
Любые советы приветствуются!