Php 更新表列并将旧数据推入另一列
我在更新数据和将旧数据保留在另一列时遇到了一些麻烦。我在表中有一个“price”列,对于旧数据,我创建了一个“old_price”列。因此,我正在网上抓取一个网站,如果该网站上的价格发生变化,我想更新我的表的价格列。但棘手的是,我还需要将旧价格推到“old_price”列 所以在我的代码中,我首先检查是否有这些数据。因为我不想复制整个数据。如果我没有数据,就把这些数据插入我的数据库Php 更新表列并将旧数据推入另一列,php,mysql,database,laravel,web-scraping,Php,Mysql,Database,Laravel,Web Scraping,我在更新数据和将旧数据保留在另一列时遇到了一些麻烦。我在表中有一个“price”列,对于旧数据,我创建了一个“old_price”列。因此,我正在网上抓取一个网站,如果该网站上的价格发生变化,我想更新我的表的价格列。但棘手的是,我还需要将旧价格推到“old_price”列 所以在我的代码中,我首先检查是否有这些数据。因为我不想复制整个数据。如果我没有数据,就把这些数据插入我的数据库 <?php if (allestates::where('link', '=', json_encode($
<?php
if (allestates::where('link', '=', json_encode($outlineUrl))->count() > 0) {
$this->error('I have the DATA.');
} else {
allestates::insertGetId($changeForMyDB);
$this->line('DATA SAVED.');
}
您可以检查现有行上的更改,如下所示:
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();
}
}
阅读有关在此处设置观察者的更多信息:@wheelmaker更新两列,意味着不保留旧数据?我不明白你说的更新两列是什么意思?谢谢你的帮助,在插入数据之前,我应该把这个函数推到哪里?这将是在它自己的观察者类中,通过我在那里发布的文档链接阅读。另外,你提到(在删除的评论中)你不想“更新两列”,我认为这意味着您不想手动更新控制器中的旧价格。如果不是这样的话,你最好跳过observer类,只检查当前价格是否与新价格不同,然后在一个地方进行处理。我用一个例子更新了答案,说明在没有观察者的情况下处理所有价格。是的!这就是我想要的。我经常运行我的web scrape bot。如果价格发生变化。我可以勉强接受新价格,然后推旧价格,对吗。非常感谢。同时也感谢《观察家》。如果需要,请使用:)
public function updating($allestate)
{
if ($allestate->wasChanged(['price']) {
$allestate->old_price = $allestate->getOriginal('price');
$allestate->save();
}
}