php—更新表列并将旧数据推送到另一列中

xv8emn3q  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(367)

我在更新数据和将旧数据保留在另一列上时遇到了一些问题。我在表中有一个“价格”列,对于旧数据,我做了一个“旧价格”列。因此,我的网站刮一个网站,如果该网站上的价格变化,我想更新我的表的价格栏。但棘手的是,我还需要把旧价格推到“旧价格”一栏。
所以在我的代码中,我首先检查是否有这些数据。因为我不想复制整个数据。如果我没有数据,就把这些数据插入我的数据库。

<?php
if (allestates::where('link', '=', json_encode($outlineUrl))->count() > 0) {
    $this->error('I have the DATA.');
} else {
    allestates::insertGetId($changeForMyDB);
    $this->line('DATA SAVED.');
}

但我也想看看网站上的“价格”有没有更新?如果价格更新了,就把它改成原来的价格。另外,将旧价格(在我的数据库中)放入“旧价格”列。我想有点复杂。我不能让它工作。任何建议,帮助真的很感激。
谢谢您!
以下是我的数据库结构:

$changeForMyDB = [
    'region' => '関西',
    'link' => json_encode($outlineUrl),
    'building_name' => '',
    'price' => '',
    'old_price' => '',
    'extend' => '',
    'address' => '',
    'total_house' => '',
    'rooms' => '',
    'cons_finish' => '',
    'entry' => '',
    'balcony' => '',
    'company_name' => '',
    'list_from' => ''
];
kwvwclae

kwvwclae1#

您可以检查现有行上的更改,如下所示:

if ($allestate = allestates::where('link', '=', json_encode($outlineUrl))->first()) {
    if ($allestate->price != $changeForMyDB['price']) {
        $allestate->old_price = $allestate->price;
        $allestate->fill($changeForMyDB);
        $allestate->save(); 
    }
} else {
    allestates::insertGetId($changeForMyDB);
    $this->line('DATA SAVED.');
}

或者,当价格发生变化时,您可以使用观察者设置旧的价格列:
在您的状态观察者中:

public function updating($allestate) 
{
    if ($allestate->wasChanged(['price']) {
        $allestate->old_price = $allestate->getOriginal('price');
        $allestate->save();
    }
}

请在此处阅读有关设置观察者的更多信息:https://laravel.com/docs/5.7/eloquent#observers

相关问题