SELECT YII2 WHERE IN

118
05 марта 2022, 20:10

Подскажите почему выборка срабатывает и показывает только одну запись

$select_account_id = 78,79,119
 $tokens = FbToken::find()->select('id')->where(['in','id', [$select_account_id]])->andWhere(['status' => 1])->andWhere(['hidden' => 0])->all();

так только выводит

 Array(
  [0] => frontend\models\FbToken Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 78
            )
        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 78
            )
        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )
        [_eventWildcards:yii\base\Component:private] => Array
            (
            )
        [_behaviors:yii\base\Component:private] => Array
            (
            )
       )
 )

но если сделать так

     $tokens = FbToken::find()->select('id')->where(['in','id', [78,79,119]])->andWhere(['status' => 1])->andWhere(['hidden' => 0])->all();

получаю

Array(
 [0] => frontend\models\FbToken Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 78
            )
        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 78
            )
        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )
        [_eventWildcards:yii\base\Component:private] => Array
            (
            )
        [_behaviors:yii\base\Component:private] => Array
            (
            )
    )
[1] => frontend\models\FbToken Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 79
            )
        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 79
            )
        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )
        [_eventWildcards:yii\base\Component:private] => Array
            (
            )
        [_behaviors:yii\base\Component:private] => Array
            (
            )
    )
[2] => frontend\models\FbToken Object
    (
        [_attributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 119
            )
        [_oldAttributes:yii\db\BaseActiveRecord:private] => Array
            (
                [id] => 119
            )
        [_related:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_relationsDependencies:yii\db\BaseActiveRecord:private] => Array
            (
            )
        [_errors:yii\base\Model:private] => 
        [_validators:yii\base\Model:private] => 
        [_scenario:yii\base\Model:private] => default
        [_events:yii\base\Component:private] => Array
            (
            )
        [_eventWildcards:yii\base\Component:private] => Array
            (
            )
        [_behaviors:yii\base\Component:private] => Array
            (
            )
    )

)

Подскажите что не правильно делаю ?

Answer 1

Лучшим вариантом для IN в Yii2 будет передача массива.

$select_account_id = [78,79,80];
$tokens = FbToken::find()->select('id')->where(['in','id', $select_account_id])->andWhere(['status' => 1])->andWhere(['hidden' => 0])->all();

Не уверен, упростили ли вы массив, написав $select_account_id = 78,79,119, так как это тут неправильный синтаксис и по хорошему оно должно выдать ошибку. Но даже если не выдаст ошибку, в вашем варианте Вы передаете $select_account_id как единый параметр.

То есть у вас формируется вот такая конструкция: ->where(['in','id', [[78,79,119]]) <- двойные скобки.

Это приведет к тому, что ваш запрос неправильно будет сформирован, так как ожидается одномерный массив, а получается двумерный (еще одна вложенность).

Если же вы и имели ввиду такой синтаксис, тогда скорее всего у вас выключены Warning, и $select_account_id = 78, а все остальное игнорируется.

В результате у вас просто формируется вот такая конструкция: ->where(['in','id', [78]) и вы получаете одну строку.

READ ALSO
Не могу извлечь данные из тега

Не могу извлечь данные из тега

ищу в этом куске <div class="chart chart__temperature" style="height: 77px;width: 660px"><div class="values" style="height: 77px"> этот текст height: 77px;width: 660px

74
почему переменная не передается в функцию?

почему переменная не передается в функцию?

почему переменная $city не передается в функцию, а $courses в where() подставляется

82
Приходит ответ без нужного блока

Приходит ответ без нужного блока

Есть функция парсинга количества страниц в индексе Google

104