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

时间:2018-10-13 05:01:26

标签: php mysql database laravel web-scraping

我在更新数据和将旧数据保留在另一列上遇到一些麻烦。我在表中有一个“价格”列,对于旧数据,我做了一个“ old_price”列。因此,我正在网站上抓取一个网站,如果该网站上的价格发生变化,我想更新表格的价格列。但棘手的是,我还需要将旧价格推到“ old_price”列。

所以在我的代码中,我首先检查是否有那些数据。因为我不想重复整个数据。而且,如果我没有将这些数据插入数据库的数据。

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

但是我还想检查网站上的“价格”是否已更新?如果价格已更新,则将其更改为旧价格。另外,将旧价格(在我的数据库中)推入“ old_price”列。我猜这有点复杂。我无法使其工作。任何建议,帮助真的很感激。

谢谢!

这是我的数据库结构:

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

1 个答案:

答案 0 :(得分:1)

您可以像这样检查现有行的更改:

It's not working

或者您可以在价格变化时使用观察者来设置old_price列:

在您的旁观者观察者中:

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.');
}

在此处了解有关设置观察员的更多信息:https://laravel.com/docs/5.7/eloquent#observers