Пишу 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
}
}
}
всем откликнувшимся и неравнодушным заранее спасибо!