У меня есть две таблицы products
и product_categories
, которые связаны через третью таблицу products_categories_products
в соответствии с соглашениями CakePHP BelongsToMany (Edit: эти ассоциации установлены в ProductsTable.php
и ProductCategoriesTable.php
). Я хочу создать список категорий продуктов, используя изображения самых продаваемых продуктов для представления каждой категории.
Я могу достичь желаемого результата, используя следующую функцию:
public function findImages(Query $query, array $options) {
$query->select([
'ProductCategories.id',
'ProductCategories.name',
'ProductCategories__image' => '(SELECT Products.image
FROM product_categories_products AS ProductCategoriesProducts
LEFT JOIN products AS Products
ON ProductCategoriesProducts.product_id = Products.id
WHERE ProductCategoriesProducts.product_category_id = ProductCategories.id
ORDER BY Products.turnover DESC
LIMIT 1)'
])->where([
'ProductCategories.name <>' => 'Unsorted'
])->order([
'ProductCategories.name' => 'asc'
]);
return $query;
}
Это приемлемо, или есть способ достичь моей цели проще простого? Я не смог найти ничего по теме создания подзапросов в CakePHP 3. Я просто наткнулся на вышеуказанное решение после пары часов разочарования. Любые советы приветствуются!