我需要在其中呈现包含混合数据的视图,每页的分页限制为6个项目。 在这种情况下,我有一个Controller,它可以呈现视图并传递一组混合数据,例如Catalogs和Products数组。
$products = new Products;
$productsCriteria = new CDbCriteria;
$catalogs = new Catalogs;
$catalogsCriteria = new CDbCriteria;
$productsCriteria->condition = "status = 1 AND category_id = :category_param";
$productsCriteria->params = array(':category_param' => $id); //$id is passed as a parameter to the action
$productsCriteria->order = "created_on DESC";
$catalogsCriteria->condition = "status = 1 AND category_id = :category_param";
$catalogsCriteria->params = array(':category_param' => $id);
$catalogsCriteria->order = "created_on DESC";
$productsCount = $products->count($productsCriteria);
$catalogsCount = $catalogs->count($catalogsCriteria);
$pages = new CPagination($productsCount + $catalogsCount);
$pages->pageSize = 6;
$pages->applyLimit($productsCriteria);
$pages->applyLimit($catalogsCriteria);
$productResult = $products->findAll($productsCriteria);
$catalogResult = $catalogs->findAll($catalogsCriteria);
$result = array_merge($productResult, $catalogResult);
$this->render('list', array('data' => $result, 'pages' => $pages, 'productsCount' => $productsCount, 'catalogsCount' => $catalogsCount));
这样可以正常工作,但它会渲染每种类型的6个项目。它呈现6个目录,然后每页呈现6个产品。我需要的是它首先渲染所有目录,每页6个,无论它需要多少页面,然后它再渲染所有产品,每页6个,无论需要多少页面。
另一方面,产品和目录处于多对多的关系中。我也尝试过以下方式提取产品:
$productsCriteria->join = ", catalog_product_relation cpr WHERE status = 1 AND category_id = :category_param AND cpr.product_id != t.id";
我用过
cpr.products_id != t.id
因为我需要列出不属于任何目录的产品。 我使用了join,因为它只是将字符串附加到条件而不添加像条件那样的任何MySQL标记。
合并这两个标准不起作用,因为它们是不同的数据模型。