Обновление столбца таблицы и перенос старых данных в другой столбец - PullRequest
0 голосов
/ 13 октября 2018

У меня проблемы с обновлением данных и сохранением старых данных в другом столбце.У меня есть столбец "цена" в таблице, и для старых данных я сделал столбец "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 голосов
/ 13 октября 2018

Вы можете проверить изменения в существующих строках следующим образом:

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

Или вы можете использовать наблюдателя, чтобы установить столбец old_price при изменении цены:

В вашем другом наблюдателе:

public function updating($allestate) 
{
    if ($allestate->wasChanged(['price']) {
        $allestate->old_price = $allestate->getOriginal('price');
        $allestate->save();
    }
}

Подробнее о настройке наблюдателей здесь: https://laravel.com/docs/5.7/eloquent#observers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...