Php Yii多对多对多过滤器
我对SQL比较陌生,甚至对Yii CDbCriteria的乐趣也比较陌生。以下是我想做的: 我有四门不同的课Php Yii多对多对多过滤器,php,mysql,yii,Php,Mysql,Yii,我对SQL比较陌生,甚至对Yii CDbCriteria的乐趣也比较陌生。以下是我想做的: 我有四门不同的课 产品 类别 产品类别 产品本地化 产品和类别通过多对多关系(由ProductHasCategory对象表示)链接。 一个产品可以有多个ProductLocalization 下面是一个场景:一个访问者在CategoryController的视图操作上着陆。该类别具有区域设置标识符(例如“en”) 我希望能够检索该类别的可用产品(到目前为止很容易),但只能检索具有“en”本地化的产品
- 产品
- 类别
- 产品类别
- 产品本地化
$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);
显然,这既不优雅也不完美;除非我大量缓存结果。嗯,是这样的吗
$params['someLocale'] = 'en';
$params['someCategoryId'] = 11;
$params['someId'] = 3; //This is obviously an example, set $params to whatever you need
$condition = 't.Product_id=:someId AND t.locale=:someLocale AND Product.ProductHasCategory.Category.id =:someCategoryId';
$productLocalization = ProductLocalization::model()->with('Product','Product.ProductHasCategory','Product.ProductHasCategory.Category')->find(array('condition'=>$condition, 'params'=>$params));
我不能100%确定我在条件中处理类别关系的方式,但如果有任何事情,请告诉我
然后,您可以使用…获取相关模型
$product = $productLocalization->getRelated('Product')->getAttributes();
请注意,我不知道您的关系的名称,我需要查看您的模型文件以获得正确的结果,但我认为应该类似于此。听起来您想要的是本地化模型上的参数化范围 首先,我要确保您可以从产品模型中提取“en”的本地化,然后从那里返回。您可能需要:
- 产品本地化模型中的参数化范围
- 产品模型中的参数化范围(用于确定产品->本地化模型的范围)
- 将上述范围与类别模型中的参数一起使用
详细信息见本节底部:请发布您迄今为止所做的尝试,我刚刚添加了当前代码。谢谢您的回答。然而,这会不会假设我有一个产品,作为一个起点,可以找到本地化?是的,但这就是正确的方式。我的意思是,
Product\u id
是ProductLocalization
表中的必填字段。因此,每个地区都有相应的产品
。我只想避免的是必须循环遍历我的类别的每一个产品,以找到该类别的产品和本地化。这不是循环。。。不过,您需要在其中添加类别关系。给我一点时间。。我将编辑答案