Проблема с поиском по атрибутам связной таблицы с группировкой результата
Добавлено: 2022.05.30, 09:29
Всем доброго времени суток!
Пишу REST API, есть 2 модели - Category & Product со связью многие-ко-многим (через промежуточную таблицу, т.е. один товар может быть привязан сразу к нескольким категориям).
Задачка простенькая - реализовать поиск по имени товара и отдавать сгруппированный по категориям результат.
В экшене делаю следующее:
в ответ на мой запрос на api.my-site.loc/v1/searchProductsByTerm?term=iphone&expand=products результат выходит вот такой:
вопрос: почему выводится список из всех категорий на сайте, а не только тех в которых содержатся товары с name LIKE '%iphone%' (при этом массив товаров почему-то везде пустой)? что я упустил? и ещё вопрос: можно ли как-нибудь отдавать массив товаров products по умолчанию, чтобы не указывать каждый раз expand=products (т.к. для этого API метода это излишне, поскольку поиск всегда будет выполняться по атрибутам товара).
всем откликнувшимся и неравнодушным заранее спасибо!
Пишу REST API, есть 2 модели - Category & Product со связью многие-ко-многим (через промежуточную таблицу, т.е. один товар может быть привязан сразу к нескольким категориям).
Задачка простенькая - реализовать поиск по имени товара и отдавать сгруппированный по категориям результат.
В экшене делаю следующее:
Код: Выделить всё
public function actionSearchProductsByTerm()
{
if (Yii::$app->request->get('term')) {
return new ActiveDataProvider([
'query' => Category::find()
->with([
'products' => function ($query) {
/** @var $query yii\db\ActiveQuery */
$query->andWhere(['like', 'name', Yii::$app->request->get('term')]);
}
]),
'pagination' => [
'pageSize' => 50,
],
]);
} else {
throw new BadRequestHttpException('Missing term parameter in request');
}
}
Код: Выделить всё
{
"success": true,
"data": {
"items": [
{
"id": 2,
"name": "Техника Apple",
"url": null,
"products": []
},
{
"id": 3,
"name": "Смартфоны Apple",
"url": null,
"products": []
},
{
"id": 4,
"name": "Планшеты Apple",
"url": null,
"products": []
},
{
"id": 5,
"name": "Ноутбуки Apple",
"url": null,
"products": []
}
],
"_links": {
"self": {
"href": "http://api.my-site.loc/v1/searchProductsByTerm?term=iphone&expand=products&page=1&per-page=50"
},
"first": {
"href": "http://api.my-site.loc/v1/searchProductsByTerm?term=iphone&expand=products&page=1&per-page=50"
},
"last": {
"href": "http://api.my-site.loc/v1/searchProductsByTerm?term=iphone&expand=products&page=1&per-page=50"
}
},
"_meta": {
"totalCount": 4,
"pageCount": 1,
"currentPage": 1,
"perPage": 50
}
}
}
всем откликнувшимся и неравнодушным заранее спасибо!