Я пытаюсь выбрать наиболее продаваемые товары, основываясь на том, сколько единиц товара было создано для этого продукта. Чем больше единиц товара на складе = тем больше продаж.
Моя таблица product_list выглядит так:
Schema::create('product_list', function (Blueprint $table) {
$table->increments('id');
$table->decimal('cost', 9, 2)->default(00.00);
$table->integer('product_category')->unsigned(); # IE Bespoke/Static/Dynamic
$table->integer('product_type')->unsigned(); # IE Themes(Custom Or Not)/Number of pages
$table->integer('product_score')->default(0); # How many favourites does it have?
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->index(array('product_category', 'product_type'));
$table->foreign('product_category')->references('id')->on('product_categories');
$table->foreign('product_type')->references('id')->on('product_types')->onDelete('cascade');
});
Моя таблица products_skus выглядит следующим образом:
Schema::create('product_skus', function (Blueprint $table) {
$table->increments('id');
$table->string('reference');
$table->integer('product_id')->unsigned();
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
$table->index(array('product_id'));
$table->foreign('product_id')->references('id')->on('product_list')->onDelete('cascade');
});
Вот то, что я пробовал до сих пор, используя Eloquent - не слишком напрягаясь по поводу получения каких-либо других объединений в данный момент, просто заставляя работать бестселлеров:
$topSellers = DB::table('product_list')->join('product_skus', 'product_skus.product_id', '=', 'product_list.id')
->groupBy('product_skus.product_id')
->limit(5)
->get()
->all();
Что дает мне эту ошибку:
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 'iezonsolutions.product_list.id' отсутствует в GROUP BY (42000)
Как я могу найти самые продаваемые вещи? Я создаю SKU для каждого product_item при его продаже, что позволяет отслеживать наиболее продаваемых товаров, а также дает пользователю уникальную возможность отслеживания.
Обновление для отображения отношений
product_skus
имеет внешний ключ product_id
, который относится к product_list
столбцу таблицы id
. Я хочу сгруппировать единицы хранения на основе отношения к идентификатору продукта. Большинство SKU сгруппированы по этому идентификатору продукта, я хочу получить их из таблицы product_list
$topSellers = DB::table('product_skus')->join('product_list', 'product_skus.product_id', '=', 'product_list.id')
->orderBy('product_skus.product_id')
->limit(5)
->get()
->all();
Теперь группирует правильные отношения, однако выводит мне
array:3 [▼
0 => {#725 ▼
+"id": 2
+"reference": "A400IEZON_"
+"product_id": 2
+"created_at": "2019-01-16 16:37:16"
+"updated_at": "2019-01-16 16:37:16"
+"cost": "100.00"
+"product_category": 1
+"product_type": 2
+"product_score": 0
+"rating": 0
+"down_payment": "10.00"
}
1 => {#726 ▼
+"id": 3
+"reference": "C400IEZON_"
+"product_id": 3
+"created_at": "2019-01-16 16:37:25"
+"updated_at": "2019-01-16 16:37:25"
+"cost": "150.00"
+"product_category": 1
+"product_type": 3
+"product_score": 0
+"rating": 0
+"down_payment": "10.00"
}
2 => {#727 ▼
+"id": 3
+"reference": "C400IEZON_"
+"product_id": 3
+"created_at": "2019-01-16 16:37:25"
+"updated_at": "2019-01-16 16:37:25"
+"cost": "150.00"
+"product_category": 1
+"product_type": 3
+"product_score": 0
+"rating": 0
+"down_payment": "10.00"
}
]
Я хочу сосчитать все это, поэтому здесь, продукт с id
3 должен быть показан как верхний продукт, за которым следует продукт 2.