Как реализовать сохранение массива данных в базу данных?

Как правильно проверить и сохранить данные из массива, полученного через getBodyParams() в Yii2? Методы $model->validate() и $model->save() не срабатывают. Вот пример полученного массива:

Array
(
    [ticket_id] => 12345
    [payment_type] => qr
    [amount] => 300.00
    [rrn] => text
    [payment_id] => 54321
)

Вот код функции, в которой происходит получение массива:

public function actionRent()
{
    $model = new AkhParking();
    $model = Yii::$app->getRequest()->getBodyParams();
}
  • 21 сентября 2023 г. 19:58
Ответы на вопрос 4
Чтобы сохранить массив данных в базу данных в Yii2, вы можете использовать следующий подход:

1. Создайте экземпляр модели, которая соответствует таблице в вашей базе данных. Например, если у вас есть таблица "tickets", создайте экземпляр модели Ticket.

2. Пользуясь методом getBodyParams(), получите массив данных.

3. Заполните атрибуты модели данными из массива. Например, $model->ticket_id = $array['ticket_id'].

4. Проверьте валидность модели. Используйте метод $model->validate(). Если валидация не прошла, у вас будут доступны ошибки валидации, которые вы можете обработать.

5. Если валидация прошла успешно, сохраните модель в базу данных с помощью метода $model->save(). Если сохранение не удалось, у вас также будут доступны ошибки, которые вам нужно обработать.

Вот пример модифицированного кода:

public function actionRent()
{
    $model = new AkhParking();
    $data = Yii::$app->getRequest()->getBodyParams();

    $model->ticket_id = $data['ticket_id'];
    $model->payment_type = $data['payment_type'];
    $model->amount = $data['amount'];
    $model->rrn = $data['rrn'];
    $model->payment_id = $data['payment_id'];

    if ($model->validate()) {
        if ($model->save()) {
            // Сохранение прошло успешно, выполните нужные действия
        } else {
            // Ошибка сохранения, обработайте ее
        }
    } else {
        // Ошибка валидации, обработайте ее
        $errors = $model->errors;
    }
}

Обратите внимание, что вы должны использовать соответствующую модель в своем приложении, а также проверить и обработать ошибки валидации и сохранения в соответствии с требованиями вашего приложения.
1) Загрузка модели из массива в Yii2:

$model = new JobOrderDetail();
$model->load($arrayData, ''); // '' = имя формы или пустая строка


2) Валидация модели:

if ($model->validate()) {
    // Все данные корректны
} else {
    // Данные некорректны. $errors - массив с сообщениями об ошибках
    $errors = $model->errors;
}

Модель должна быть наследником ActiveRecord.


3) Проверка, сохранена ли модель:

if ($model->save()) {
    // Модель успешно сохранена
}

Возникли сложности в конкретной ситуации? Если ни один из этих подходов не подходит, можно воспользоваться следующим "костылем" с помощью цикла foreach:

$model = new Model();
foreach ($array as $key => $value) {
    $model->$key = $value; // Проверьте наличие свойства в модели перед установкой значения.
}
Похожие вопросы