Laravel 5.6 - получить измененные значения после updateOrCreate - PullRequest
0 голосов
/ 25 июня 2018

Я использовал laravel 5.6 и использовал модель updateOrCreate для добавления или обновления некоторых данных.
Но мне нужно получить все значения, которые изменились

$q=Userssub::updateOrCreate(
    ['userid' => $uid  ],
    ['model'  => $model]
);

, и результат отображается как вэто изображение

screen shot of image

Как получить массив изменений?
Я пытался получить его с помощью

$u->changes

и

$u->changes->toarray() 

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

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Создает массив, который будет содержать исходное значение атрибута и то, на что оно было изменено:

if (!$model->wasRecentlyCreated) {
    $original = $model->getOriginal();
    $changes = [];

    foreach ($model->getChanges() as $key => $value) {
        $changes[$key] = [
            'original' => $original[$key],
            'changes' => $value,
        ];
    }
}

например

(
    [first_name] => [
        [original] => Kevinn
        [changes] => Kevin
    ]
    [website] => [
        [original] => google.com
        [changes] => google.ca
    ]
)
0 голосов
/ 25 июня 2018

Eloquent модели имеют два защищенных массива, $original и $changes, которые содержат атрибуты, как они были при извлечении из хранилища, и атрибуты, которые были изменены, соответственно.

Таким образом, вы можете использовать getOriginal() и getChanges() и сравните различия.

$model = Model::createOrUpdate([...]);

// wasRecentlyCreated is a boolean indicating if the model was inserted during the current request lifecycle.
if (!$model->wasRecentlyCreated) {
   $changes = $model->getChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...