【问题标题】:Yii many to many to many filterYii 多对多过滤器
【发布时间】: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);

显然,这既不优雅也不最优;除非我大量缓存结果。

【问题讨论】:

  • 请发布您到目前为止所尝试的内容
  • 完成,我刚刚添加了我当前的代码。

标签: php mysql yii


【解决方案1】:

嗯是这样的吗?

$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();

请注意,我不知道您的关系的名称,我需要查看您的模型文件才能做到这一点,但我认为应该与此类似。

【讨论】:

  • 感谢您的回答。但是,这是否会假设我有一个产品作为起点,可以为其查找本地化?
  • 嗯,是的,但这就是正确的方式。我的意思是,Product_idProductLocalization 表中的必填字段。所以对于每个语言环境都有一个对应的Product
  • 确实如此。我只是想避免的是必须遍历我的类别的每个产品才能找到该类别的产品和本地化。
  • 嗯,这不是循环......不过,您需要在其中添加 Category 关系。给我一秒钟。我会编辑答案
【解决方案2】:

听起来您所追求的是本地化模型上的参数化范围。

我会首先确保您可以从产品模型中提取“en”的本地化,然后从那里返回。您可能需要:

  • 产品本地化模型中的参数化范围
  • 产品模型中的参数化范围(范围您的产品 -> 本地化模型)
  • 将上述范围与您的类别模型中的参数一起使用

详情在本节底部:http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-named-scopes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2016-01-22
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多