@shanik

Как правильно изменять и добавлять данные Yii?

как правильно изменять и добавлять данные?
Чтобы одна функция могла, как добавить новые значения, так и изменить старые.

У меня сейчас происходит только добавление и ругается на дубль.

$floraUser = new floraUser();
$users = Yii::$app->request->post('Flora')['users'];
foreach ($users as $user) {
                        $floraUser->isNewRecord = true;
                        $floraUser->flora_id = $id;
                        $floraUser->user_id = $user;
                        $floraUser->save();
                    }


без этого $floraUser->isNewRecord = true; добавляется только 1 значение
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
очень странный код.
А зачем вообще $floraUser->isNewRecord = true?
И что за из ниоткуда взявшаяся переменная $id?
Почему создание экземпляра класса FloraUser за пределами перебора? Вы же при новой итерации цикла работаете не с новым классом, а со старым. А у него уже есть id и Вы просто перезаписываете кучу раз одну и ту же запись.
Если я правильно понял Вашу затею, то видимо так:
foreach (Yii::$app->request->post('Flora')['users'] as $user) {
                        $floraUser = new FloraUser();
                        $floraUser->flora_id = $id;
                        $floraUser->user_id = $user;
                        if(!$floraUser->save())
                           throw new \yii\web\ErrorException(yii\helpers\Json::encode($floraUser->errors));//это что бы увидеть в дебаге ошибки валидации, можно грохнуть
                    }

а если еще сократить, то так:
foreach (Yii::$app->request->post('Flora')['users'] as $user) {
                        $floraUser = new FloraUser([
                        'flora_id'=>$id,
                        'user_id'=>$user
                         ]);
                        if(!$floraUser->save()) 
                           throw new \yii\web\ErrorException(yii\helpers\Json::encode($floraUser->errors)); //это что бы увидеть в дебаге ошибки валидации, можно грохнуть
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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