我在更新数据和将旧数据保留在另一列上遇到一些麻烦。我在表中有一个“价格”列,对于旧数据,我做了一个“ 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' => ''
];
答案 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