Можно ли такой метод переписать с Yii1 на Yi2?

Здравствуйте, нужна помощь. Мне необходимо переписать метод с Yii1 на Yii2.
Суть такая: метод принимает массив значений, к примеру
[["name" => "attr_date_end", "jointype" => "left join"]]


Вот реализация метода
foreach ($attributes as $item) {

$criteria = new CDbCriteria;

criteria->select = (!is_array($this->getDbCriteria()->select) ? $this->getDbCriteria()->select : '') . ", " . $item['name'] . "." .$item['select'] . " as " . $item['name'];

$criteria->join = " " . $item['jointype'] . " cms_attributes_values " . $item['name'] . " on " . $item['name'] . ".id_obj=t.id AND " . $item['name'] . ".id_attr=" . $item['id_attr'] . " AND " . $item['name'] . ".id_tree=" . $item['id_tree'] . ($item['condition'] ? ' AND ' . str_replace("[id_variant]", $item['name'] . ".id_variant", str_replace("[id_val]", $item['name'] . ".id_val", str_replace("[text]", $item['name'] . ".text", $item['condition']))) : '');

$this->getDbCriteria()->mergeWith($criteria);
}

   return $this;


Нужно реализовать такое же, но на Yii2, пока сделал так:

$query = new Query();

$query->select = (!is_array($query->select) ? $query->select : '') . ", " . $item['name'] . "." . $item['select'] . " as " . $item['name'];

$query->join = " " . $item['jointype'] . " cms_attributes_values " . $item['name'] . " on " . $item['name'] . ".id_obj=t.id AND " . $item['name'] . ".id_attr=" . $item['id_attr'] . " AND " . $item['name'] . ".id_tree=" . $item['id_tree'] . ($item['condition'] ? ' AND ' . str_replace("[id_variant]", $item['name'] . ".id_variant", str_replace("[id_val]", $item['name'] . ".id_val", str_replace("[text]", $item['name'] . ".text", $item['condition']))) : '');


Но createCommand() выдает ошибку Invalid argument supplied for foreach()

Если кто может, прошу помочь
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
"nvalid argument supplied for foreach()" значит, что у Вас $attributes - не массив. Вы не в том месте ошибку ищите.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы