kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn

Почему не работает $user->save();?

Код:
public function editdata()
    {

        $user = User::findOne($this->username);
        if($this->email != null)$user->email = $this->email;
        if($this->fio != null)$user->fio = $this->fio;
        if($this->apartment != null)$user->apartment = $this->apartment;
        if($this->house != null)$user->house = $this->house;
        if($this->housing != null)$user->housing = $this->housing;
        if($this->street != null)$user->street = $this->street;
        if($this->phone != null)$user->phone = $this->phone;
        if($this->password != null)$user->setPassword($this->password);

        return $user->save();

    }

Ошибка:
Call to a member function save() on null
  • Вопрос задан
  • 497 просмотров
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
findOne() ищет по первичному ключу, по id. поэтому и не находит
надо так:
$user = User::find()->where(['username'=>$this->username])->one()

а что бы не было таких ошибок, добавлять if
public function editdata()
    {
if($user = User::find()->where(['username'=>$this->username])->one()){
        if($this->email != null)$user->email = $this->email;
        if($this->fio != null)$user->fio = $this->fio;
        if($this->apartment != null)$user->apartment = $this->apartment;
        if($this->house != null)$user->house = $this->house;
        if($this->housing != null)$user->housing = $this->housing;
        if($this->street != null)$user->street = $this->street;
        if($this->phone != null)$user->phone = $this->phone;
        if($this->password != null)$user->setPassword($this->password);

        return $user->save();
}
return false;
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Потому что User::findOne возвращает null. Смотрите, что у вас в $this->username и действительно ли есть такой пользователь. Судя по коду, вы получаете с клиента изменённый username и пытаетесь найти его в БД.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы