public function getProducts()
{
$query = Product::findBySql('SELECT product.* FROM product JOIN product_tag ON product.id=product_tag.product_id WHERE tag_id in (SELECT tag_id FROM product_page_tag WHERE product_page_id=:id) GROUP BY id HAVING COUNT(id) = (SELECT COUNT(tag_id) FROM product_page_tag WHERE product_page_id=:id)', [':id' => $this->id]);
$query->multiple = true;
return $query;
}
отладка идет на сервере там счас нету дебаг панели
да и не понятно как может помочь текст запроса?
счас возвращаются все объекты,пейджер всегда на 1 странице
Note that because the SQL statement is already specified, calling additional query modification methods (such as where(), order()) on the created yii\db\ActiveQuery instance will have no effect. However, calling with(), asArray() or indexBy() is still fine.
kukuruku писал(а): ↑2017.02.28, 18:48
да и не понятно как может помочь текст запроса?
ну а как дебажить пагинацию, если не видно что генерируется. если б это был хотя бы не findBySql, то возможно было б проще, а так кто знает что там генерируется в итоге
вообще этот запрос нужно просто на Query Builder переписать, и все ок будет
public function getProducts()
{
$query = Product::findBySql('SELECT product.* FROM product JOIN product_tag ON product.id=product_tag.product_id WHERE tag_id in (SELECT tag_id FROM product_page_tag WHERE product_page_id=:id) GROUP BY id HAVING COUNT(id) = (SELECT COUNT(tag_id) FROM product_page_tag WHERE product_page_id=:id)', [':id' => $this->id]);
$query->multiple = true;
return $query;
}
Yii::$app->params['pageSize'] тут число
C таким запросом Вам нужен SqlDataProvider
+
Info: The totalCount property is required only if you need to paginate the data. This is because the SQL statement specified via sql will be modified by the provider to return only the currently requested page of data. The provider still needs to know the total number of data items in order to correctly calculate the number of pages available.
Без получения количества записей(getTotalCount(), getCount(), getModels() и прочее, что зависит от prepareTotalCount()), пагинанация не работает. Давнишний баг\фича.
Добавьте до "куска кода" $dataProvider->prepare(), все заработает.