【问题标题】:how to compare strings in using CDBCRITERIA in Yii?如何在 Yii 中使用 CDBCRITERIA 比较字符串?
【发布时间】:2014-09-17 10:50:49
【问题描述】:

我正在使用 Yii 框架,我想做一些搜索过滤,但在某些情况下我得到错误的结果如下:

我有 2 个复选框:加拿大和美国,如果我选择加拿大,我将只获得与加拿大相关的所有结果,而如果我选择美国,我将获得数据库中的所有结果,无论它与美国是否相关状态与否,这个错误是绝对发生的,因为美国字符串是两部分,所以它需要在引号中。这是我的代码:

查看页面:

 echo '<div class="checkbox"><label>'.
       CHtml::checkBox($m2->tag, false, array('value'=>"$m2->tag")).$m2->tag              
       .'</label></div>';

控制器:

$c = new CDbCriteria();
        $c->order = "idJob DESC";
            $model = Jobs::model()->findAll($c);
            $model2 = Tags::model()->findAll();
            $lcr = "";
            $tag="";
            foreach($model2 as $m2){

                if(isset($_POST[$m2->tag])){

                    $tag = $_POST[$m2->tag];                           

                    if($m2->category=='Location')

                        $lcr[]= $tag; 
                }
            }


            if($lcr!="")

                $c->addInCondition('location', $lcr, 'AND');

            $model = Jobs::model()->findAll($c);  

【问题讨论】:

  • 我在这里没有看到任何 SQL。这与 SQL 有什么关系?这看起来像是 Yii 使用他们的模型系统所特有的。
  • criteria-&gt;addInCondition() 生成一个sql查询为attribute In (1, 2, 3)...
  • 这是 Yii 或 Yii 使用的 ORM,而不是 SQL。
  • @mawburn 好的,谢谢,但我没有找到合适的标题 :(

标签: php checkbox yii criteria


【解决方案1】:

好的,听起来我找到了解决这个问题的方法并且它工作正常,这里是解决方案:

在控制器中:

 foreach($model2 as $m2){

            if (strpos($m2->tag, ' ') !== FALSE)
                $m2->tag = str_replace(" ","_",$m2->tag);

                if(isset($_POST["$m2->tag"])){
....

所以,正如您在代码中看到的,如果 tag 包含任何空格,它将被替换为 _ ,并且在 HTML 中,id 属性将自动替换为 _ 的空格,所以它们现在匹配。

【讨论】:

    【解决方案2】:

    请检查您的代码中的以下代码,它会为您工作

    $criteria->addSearchCondition('location', 'YOUR SEARCH STRING', false);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 2022-07-22
      • 1970-01-01
      • 2020-05-24
      • 2015-06-29
      • 2012-10-05
      • 2022-10-15
      • 2011-01-15
      相关资源
      最近更新 更多