Обновление, добавление информации

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
evnazar4
Сообщения: 49
Зарегистрирован: 2018.11.09, 09:38

Обновление, добавление информации

Сообщение evnazar4 »

Задача: Проверить, существует ли в таблице Clients, поле с указанным в форме телефоном, если нет,обновить name. Если да создать новое.
Ошибку выдает сам IDE в строке if(isset... что не так делаю?

Код: Выделить всё

 public function actionCreate()
    {
$model = new Orders();
if(isset(Clients::find()->where(['phone' => $_POST['Orders']['phone']])->one())){
                $client->name = $_POST['Clients']['name'];
                $client->save();
            }
            else
            {
            $client->name = $_POST['Clients']['name'];
            $client->phone= $_POST['Clients']['phone'];
            $client->save();
            }
            return $this->redirect(['index']);
            }
            
            
Аватара пользователя
Alexum
Сообщения: 683
Зарегистрирован: 2016.09.26, 10:00

Re: Обновление, добавление информации

Сообщение Alexum »

evnazar4 писал(а): 2019.02.06, 08:53 Ошибку выдает сам IDE в строке if(isset... что не так делаю?
Много чего, но конкретно в случае isset используете его на выражение а не на переменную.
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Обновление, добавление информации

Сообщение someweb »

Всё не так делаете.

Код: Выделить всё

if (Clients::find()->where(['phone' => $_POST['Orders']['phone']])->one() !== null) {
Но это вам не поможет, т. к. $client неопределен.
Должно быть так

Код: Выделить всё

public function actionCreate()
{
    if (($client = Clients::find()->where(['phone' => $_POST['Orders']['phone']])->one()) !== null) {
        $client->name = $_POST['Clients']['name'];
        $client->save();
    } else {
        $client = new Clients();
        $client->name = $_POST['Clients']['name'];
        $client->phone = $_POST['Clients']['phone'];
        $client->save();
    }
    return $this->redirect(['index']);
}
Но так тоже нельзя делать - если не пройдет валидация никто об этом не узнает.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
evnazar4
Сообщения: 49
Зарегистрирован: 2018.11.09, 09:38

Re: Обновление, добавление информации

Сообщение evnazar4 »

someweb писал(а): 2019.02.06, 09:46 Всё не так делаете.

Код: Выделить всё

if (Clients::find()->where(['phone' => $_POST['Orders']['phone']])->one() !== null) {
Но это вам не поможет, т. к. $client неопределен.
Должно быть так

Код: Выделить всё

public function actionCreate()
{
    if (($client = Clients::find()->where(['phone' => $_POST['Orders']['phone']])->one()) !== null) {
        $client->name = $_POST['Clients']['name'];
        $client->save();
    } else {
        $client = new Clients();
        $client->name = $_POST['Clients']['name'];
        $client->phone = $_POST['Clients']['phone'];
        $client->save();
    }
    return $this->redirect(['index']);
}
Но так тоже нельзя делать - если не пройдет валидация никто об этом не узнает.
Спасибо! А как валидировать эти поля?
evnazar4
Сообщения: 49
Зарегистрирован: 2018.11.09, 09:38

Re: Обновление, добавление информации

Сообщение evnazar4 »

someweb писал(а): 2019.02.06, 09:46

Код: Выделить всё

    if (($client = C......
И почему после if две круглые скобки?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Обновление, добавление информации

Сообщение someweb »

Спасибо! А как валидировать эти поля?
https://www.yiiframework.com/doc/guide/ ... tart-forms
https://www.yiiframework.com/doc/guide/ ... validation
И почему после if две круглые скобки?
http://php.net/manual/ru/language.opera ... edence.php
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить