Laravel — изменение структуры БД — это хорошая практика или нет?

Привет, как дела? Я хотел спросить вас, у кого больше опыта, чем у меня, является ли то, что я хочу сделать, хорошей или плохой практикой в ​​Laravel.

Я делаю приложение для заказа, и в моей базе данных указано, что у продукта есть определенная цена (еще одно поле в таблице продуктов). Но потом я понял, что когда цена товара однажды изменится, цена изменится и в старом заказе, то есть старый заказ примет новую цену товара именно в этот момент, а не в дату, когда заказ был размещен, тем самым порождая информационную проблему.

Для этого я решил создать новую таблицу с временными ценами, то есть, если цена изменится, то в базе данных будет создана новая строка с ценой на определенную дату, но цена, которая была в другую, равна записано. свидание.

Теперь мой вопрос... Как я могу перенести текущую цену продукта в эту новую таблицу, которую я создаю, без вмешательства пользователя... то есть перенести все цены каждого продукта в эту новую таблицу. Моя идея состояла в том, чтобы создать функцию, которая проходит через каждый продукт и создает новую строку в таблице цен с идентификатором продукта, ценой и текущей датой. После того, как эта функция будет создана, запустите ее через Tinker и чтобы пользователь не заметил абсолютно ничего, кроме того, чтобы система приняла новую структуру цен.

Это хорошо? Это хорошая практика или есть лучший способ сделать это?

Спасибо.


person JoaquinVilchez    schedule 17.07.2020    source источник


Ответы (1)


добро пожаловать в СО! Это один из возможных способов сделать это, чтобы иметь таблицу с ценовой историей, в т.ч. даты начала и окончания действия. Чтобы не усложнять запросы для показа пользователю его истории заказов, я бы порекомендовал вам также сохранить цену товара в заказе. Например, в таблице сопоставления «многие ко многим» между заказом и продуктом, где вы также можете сохранить количество купленных продуктов.

Вы можете сделать команду CLI (например, php artisan make:command InsertOrderPrices), чтобы заполнить эти поля для старых заказов после их создания.

person Maxi    schedule 17.07.2020
comment
Большой! Попробую твой совет, спасибо большое Макси, приветствую. - person JoaquinVilchez; 17.07.2020