gpt4 book ai didi

php - 插入和更新数据,同时保留旧数据?通过 Laravel

转载 作者:行者123 更新时间:2023-11-29 05:52:35 25 4
gpt4 key购买 nike

如果没有,我正在插入数据(这部分没问题)。但是如果有相同的数据。我也想更新它,如果数据更新了。然后我希望它保留旧数据。因为我会用到那些。

插入零件后遇到一些麻烦。更新数据并保留旧数据。

这是我的插入和更新代码;

$oldData= allestates::where('link',json_encode($outlineUrl))->addSelect('id' , 'price')->limit(1)->get()->toArray();

if(!empty($oldData)) {

$oldData = (array)$oldData[0];

$oldData['updated_estate_id'] = $oldData['id'];

unset($oldData['id']);

\DB::table('updated_estates')->insertGetId($oldData);

allestates::where('link',json_encode($outlineUrl))->update(['price' => $changeForMyDB['price'] ]);



}else{

allestates::insertGetId($changeForMyDB);
$this->line('Data saved.');

}

我现在遇到这个错误:

SQLSTATE[HY000]: General error: 1364 Field 'link' doesn't have a default value (SQL: insert into updated_estates (price, updated_estate_id) values (1648万円(1戸)~3298万円(1戸), 1))

这也是我的数据库:主表:https://imgur.com/a/qIsgXsz

更新表:https://imgur.com/a/Ae90VWR

最佳答案

如果我正确理解您的问题,您需要在没有数据的情况下插入数据并在存在的情况下进行更新,但您还想保存更新之前的数据,对吗?

您需要的第一件事是一个唯一标识符(一个用于检查条目是否存在的参数),在您的情况下,我想它是公司名称或 ID 或其他东西。

您还需要另一个表,例如“updated_entries”,其中包含以下列:ID | UPDATED_ENTRY_ID |价格 | (可能是日期);您将在其中保存所有旧数据。

当你检查是否需要插入或更新时,如果它是先更新你选择你要更新的数据并将其插入到上面提到的“updated_entries”,并将条目的 id 作为 UPDATED_ENTRY_ID 传递,所以每当你想要查看某个条目的更新历史记录,您只需按 UPDATED_ENTRY_ID 选择它即可。

您可以像这样执行上述操作:

$oldData= Estates::where('link',json_encode($outlineUrl))->addSelect('id' , 'price')->limit(1)->get()->toArray();
//so now old data only contains ID and PRICE

if(!empty($oldData)) { // If an entry exists you need to update it;

$oldData = (array)$oldData[0]; // You can't converts ->first() to an array so this is the only way I found;

$oldData['updated_entry_id'] = $oldData['id']; // You save id of the entry you are going to update;

unset($oldData['id']); // You don't need to insert this entry in saving table by it's old ID, you already stored it in 'updated_entry_id';

\DB::table('updated_entries')->insertGetId($oldData); // You save your old data and now you can proceed to updating;

//And if you only need to update price just do it like this:
Estates::where('link',json_encode($outlineUrl))->update(['price' => $changeForMyDB['price'] ]);

//Or you can update the whole row like this:
//Estates::where('link',json_encode($outlineUrl))->update($changeForMyDB);

}else{ // If you don't have any entries you just insert a new one;

Estates::insertGetId($changeForMyDB);
$this->line('Data saved.');

}
  • 编辑代码以仅节省价格;
  • 因此您不需要在第二个表中有任何其他参数(“updatedestates”),它只需要:ID、UPDATED_ENTRY_ID、PRICE;

在此之后,您可以轻松地更新您的表格,并确保保存该条目的每个旧实例。

关于php - 插入和更新数据,同时保留旧数据?通过 Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52773192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com