代码之家  ›  专栏  ›  技术社区  ›  user794846

YII2查询中的位置

  •  2
  • user794846  · 技术社区  · 7 年前

    以下查询中不起作用的活动记录。根据文件,这应该有效:

    $data = $dropDownData->find()
                        ->select('country, country_text')
                        ->distinct()
                        ->WHERE(['in', 'server', $servers]);
    
    $listData = ArrayHelper::map($data,'country', 'country_text');
    

    SQL等价物是:

    $query = "SELECT DISTINCT country, country_text 
              FROM `dropDownData` 
              WHERE server IN ({$servers})";
    

    $servers只包含字符串1,2,4

    我在这里做错了什么?

    2 回复  |  直到 7 年前
        1
  •  5
  •   rob006    7 年前

    基于yii2文档 $servers 应该是数组而不是字符串。

    in:操作数1应为列或db表达式。操作数2可以是 数组或查询对象。

    https://www.yiiframework.com/doc/guide/2.0/en/db-query-builder#operator-format

    尝试使用正确的数组:

      $servers = [1,2,4]
      $data = $dropDownData->find()
                          ->select('country, country_text')
                          ->distinct()
                          ->WHERE(['in', 'server',[1,2,4]]);
    

      $data = $dropDownData->find()
                          ->select('country, country_text')
                          ->distinct()
                          ->WHERE(['in', 'server', $servers]);
    
        2
  •  -1
  •   Shringiraj Dewangan    7 年前

    应该使用数组变量

    $servers = [1,2,4];