【问题标题】:yii: CDbCriteria->mergeWith returns nullyii: CDbCriteria->mergeWith 返回 null
【发布时间】:2014-03-26 16:32:39
【问题描述】:

我有以下代码:

     if ($query):
        $query_c = new CDbCriteria;
        $query_c->alias = 'P';
        $query_c->compare('name', $query, true, 'AND');
        $query_c->compare('description', $query, true, 'OR');
    endif;

    if ($category):
        $join = new CDbCriteria;
        $join->alias = 'P';
        $join->join='LEFT JOIN product_x_category as P_x_c ON P.id = P_x_c.product_id';

        $join->compare('P_x_c.category_id', '='.Category::model()->find('path=?', array($category))->id);
    endif;

    if ($query && $category):
        $criteria = $query_c->mergeWith($join);
    elseif ($query):
        $criteria = $query_c;
    elseif ($category):
        $criteria = $join;
    endif;

在 $query_c->mergeWith($join) 之后,我期望 $criteria 类似于

 LEFT JOIN product_x_category as P_x_c ON (P_x_c.id = P.id)
 WHERE P_x_c.category_id = x
 AND (P.name LIKE '%query%' OR P.description LIKE '%query%')

但相反,我得到 $criteria == null...

这里出了什么问题?这不应该工作吗?

【问题讨论】:

    标签: php sql yii


    【解决方案1】:

    这可能不是您问题的答案。但尝试使用以下代码。您可以仅使用一个条件来构建查询。

        $criteria = new CDbCriteria;
        $criteria->alias = 'P';
        if ($query):
            $criteria->compare('name', $query, true, 'AND');
            $criteria->compare('description', $query, true, 'OR');
        endif;
    
        if ($category):
            $criteria->join = 'LEFT JOIN product_x_category as P_x_c ON P.id = P_x_c.product_id';
            $criteria->compare('P_x_c.category_id', '=' . Category::model()->find('path=?', array($category))->id);
        endif;
    

    【讨论】:

    • 非常感谢!可能不是问题的根源,但仍然解决了我的问题。通过不使用 mergeWith,我回避了有问题的步骤,并且我的代码按预期工作。
    【解决方案2】:

    对于遇到此问题的任何人来说,问题的根源在于mergeWith 没有返回任何内容!

    它通过合并传递的标准的属性来更新运行它的标准。行:

    $criteria = $query_c->mergeWith($join);  
    

    $criteria 设置为null,但$query_c 现在是$query_c$join 的合并。

    你需要这样的东西:

    $criteria = new CDbCriteria();
    
    if($query){
      $criteria->mergeWith($query_c);
    }
    if($category){
      $criteria->mergeWith($join);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多