user7027429
user7027429

Reputation:

Laravel : How can i get old and new value by updateOrCreate

I want update or create in data base but i want get the old value and updated value because i want to compare between these two value

for example

this item in table user

name = Alex and Order = 10

so now i want update this person by

name = Alex and Order = 8

Now After updating or creating if not exist

just for update i want get

Old order 10 | And new Order 8

I want compare between these order

i have tryin getChange() and getOriginal() but two the function give me just the new value.

Please Help

Upvotes: 3

Views: 12275

Answers (3)

user7027429
user7027429

Reputation:

Solution

            $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();
        }

Upvotes: 0

nakov
nakov

Reputation: 14248

Is the name unique in the table? Because if it is not you will have updates on multiple rows with the same data.

So the best approach is to use the unique column which is probably the 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') ]
);

Upvotes: 0

Mihir Bhende
Mihir Bhende

Reputation: 9045

You can get the old value using getOriginal if you have the object already loaded.

For example :

$user = User::find(1);

$user->first_name = 'newname';

// Dumps `oldname`
dd($user->getOriginal('first_name'));
$user->save();

However in case of updateOrCreate, you just have the data. I am not sure about a way to do it using updateOrCreate but you can do simply do :

$user = User::where('name', 'Alex')->first();
$newOrder = 10;

if($user){
    $oldOrder = $user->getOriginal('order');
    $user->order = $newOrder;
    $user->save();
}

Upvotes: 6

Related Questions