@Alexey-V

Yii2 Invalid argument supplied for foreach() в чём смысл ошибки?

Я знаю, что подобный вопрос уже задавали. Но код спрашивающего сложнее, у меня же какая ерунда, причём ранее такой подход работал:

вот модель:
<?php

namespace app\models;

use yii\db\ActiveRecord;

class Master extends ActiveRecord {

}

контроллер:
<?php

namespace app\controllers;

use yii\web\Controller;
use yii\data\Pagination;
use app\models\Master;

class MasterController extends Controller {
public function actionRost() {
$masters = Master::find()->select('id' => '1')->where('rost')->one();
return $this->render('index', compact('masters'));
}
}

вьюшка точнее место где расположен цикл:
<?php foreach ($masters as $master): ?>

<?=$master->rost?>

<?php endforeach; ?>

Всё вроде очень просто, но в этот раз выдаёт ошибку
  • Вопрос задан
  • 942 просмотра
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Этот запрос не возвращает массив. Тут либо пусто, либо не массив.
$masters = Master::find()->select('id' => '1')->where('rost')->one();

Соотвественно foreach (перебор массива) не требуется в коде. Уберите его!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@smigles
$masters = Master::find()->select('id' => '1')->where('rost')->one();
— что означает эта конструкция?

Если вам нужна одна запись, где первичный ключ id равен 1, то нужно писать так:
$master = Master::findOne(1);

<?= $master->rost ?>

Если вам нужны все записи, где rost равно 1, то так:
$masters = Master::findAll(['rost' => 1]);

<?php foreach ($masters as $master): ?>
    <?= $master->rost ?>
<?php endforeach ?>
Ответ написан
Ваш ответ на вопрос

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

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