Если я правильно понимаю ваш вопрос, вам нужно вставить данные, если их нет, и обновить, если они существуют, но вы также хотите сохранить данные, которые у вас были до обновления, верно?
Первое, что вам нужно, это уникальный идентификатор (параметр, по которому вы проверяете, существует запись или нет), в вашем случае я предполагаю, что это название компании или ID или что-то в этом роде.
Вытакже нужна другая таблица, например «updated_entries», со столбцами: ID |UPDATED_ENTRY_ID |ЦЕНА |(МОЖЕТ ДАТА);где вы будете хранить все старые данные.
Когда вы проверяете, нужно ли вставлять или обновлять, если это обновление сначала, вы выбираете данные, которые вы собираетесь обновить, и вставляете их в вышеупомянутые "updated_entries"", и передайте идентификатор записи как 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;
После этого вы можете легко обновить свою таблицу и быть уверенным, что каждый старый экземпляр этой записи сохранен.