Yii2查询中的地方

时间:2018-07-09 16:48:56

标签: php yii2 yii2-basic-app

以下活动记录WHERE IN查询不起作用。根据文档,这应该可以工作:

$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 个答案:

答案 0 :(得分:3)

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

  

in:操作数1应该是列或数据库表达式。操作数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]);

答案 1 :(得分:-1)

您应该使用数组变量

$servers = [1,2,4];