【发布时间】:2014-04-01 19:26:08
【问题描述】:
我对 SQL 比较陌生,甚至对 Yii CDbCriteria 的乐趣也比较陌生。这是我正在尝试做的事情:
我有四个不同的班级
- 产品
- 类别
- ProductHasCategory
- 产品本地化
产品和类别通过多对多关系链接(由 ProductHasCategory 对象表示)。 一个产品可以有多个 ProductLocalization。
以下是场景:访问者登陆 CategoryController 的视图操作。类别具有区域设置标识符(例如“en”)。
我希望能够检索适用于该类别的产品(到目前为止很容易),但只能检索具有“en”本地化的产品。
我已经能够使用效率极低的方式(例如 for 循环*)来实现这一点。在现实世界中实现这一目标的最佳方法是什么?
*编辑:根据要求,这是我目前找到的(天真的)解决方案:
$productWithAppropriateLocalization = array();
foreach ($category->products as $product){
$locale_product = ProductLocalization::model()->find("product_id = :product_id AND locale = :locale", array(":product_id"=>$product->id, ":locale"=>$category->locale));
$productWithAppropriateLocalization[] = $locale_product;
}
$localizedProductsDataProvider = CArrayDataProvider($productWithAppropriateLocalization);
显然,这既不优雅也不最优;除非我大量缓存结果。
【问题讨论】:
-
请发布您到目前为止所尝试的内容
-
完成,我刚刚添加了我当前的代码。