我要在数据库中更新或创建 但我想获取旧值和更新后的值,因为我想在这两个值之间进行比较
例如
表用户中的此项
name = Alex and Order = 10
所以现在我想更新此人
name = Alex and Order = 8
现在更新或创建后(如果不存在)
仅用于我想要的更新
Old order 10 | And new Order 8
我想在这两个订单之间进行比较
我有tryin getChange()和 getOriginal(),但是两个函数给了我新的价值。
请帮助
答案 0 :(得分:1)
如果已经加载了对象,则可以使用getOriginal
获得旧值。
例如:
$user = User::find(1);
$user->first_name = 'newname';
// Dumps `oldname`
dd($user->getOriginal('first_name'));
$user->save();
但是对于updateOrCreate
,您只需要数据。我不确定使用updateOrCreate
的方法,但是您可以简单地做到:
$user = User::where('name', 'Alex')->first();
$newOrder = 10;
if($user){
$oldOrder = $user->getOriginal('order');
$user->order = $newOrder;
$user->save();
}
答案 1 :(得分:0)
表中的名称是否唯一?因为如果不是这样,您将在具有相同数据的多行上进行更新。
所以最好的方法是使用唯一列,它可能是ID。
User::updateOrCreate(
[ 'id' => $request->get('id') ], // if the $id is null, it will create new row
[ 'name' => $request->get('name'), 'order' => $request->get('order') ]
);
答案 2 :(得分:0)
解决方案
$model = Trend::where('name', $trend->name)->first();
if ($model) {
$model->old_order = $model->getOriginal('order');
$model->order = $key + 1;
$model->save();
} else {
Trend::where('order', $key + 1)->delete();
$new = new Trend();
$new->name = $trend->name;
$new->old_order = $key + 1;
$new->order = $key + 1;
$new->tweet_volume = $trend->tweet_volume;
$new->save();
}