Laravel 5.6-在updateOrCreate之后获取更改的值

时间:2018-06-25 17:30:51

标签: php laravel laravel-5.6

我使用过laravel 5.6,并使用updateOrCreate模型来添加或更新一些数据。
但是我需要获取所有已更改的值

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

结果显示如下图所示

screen shot of image

如何获取更改数组?
我试图用

$u->changes

$u->changes->toarray() 

,但都返回null。
我该怎么做才能获得更改的值?

2 个答案:

答案 0 :(得分:3)

这将创建一个数组,其中将包含原始属性值及其更改为:

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
    ]
)

答案 1 :(得分:1)

雄辩的模型具有两个受保护的数组$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();
}