我使用过laravel 5.6,并使用updateOrCreate
模型来添加或更新一些数据。
但是我需要获取所有已更改的值
$q=Userssub::updateOrCreate(
['userid' => $uid ],
['model' => $model]
);
结果显示如下图所示
如何获取更改数组?
我试图用
$u->changes
和
$u->changes->toarray()
,但都返回null。
我该怎么做才能获得更改的值?
答案 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();
}