#mysql #database #laravel
#mysql #База данных #laravel
Вопрос:
В файле Excel у меня есть столбцы, подобные этому; 11.01-12.00, 12.01-13.00, …, 29.01-30.00. А содержание столбца — это цена. Я хочу сохранить цену во многих диапазонах в MySQL, например, в столбце Excel.
Должен ли я создавать такую таблицу, или у ваших ребят есть какой-нибудь лучший способ, пожалуйста, направьте меня?
Комментарии:
1. Сохраните его как целое число в столбце с именем ‘цена’?
2. Не могли бы вы привести мне пример, пожалуйста?
3. У каждого столбца в файле Excel есть цена? И, следовательно, будет цена, соответствующая каждому диапазону, например, диапазон: 11.01-12.00 цена: 11.50, диапазон: 29.01-30.00 цена: 29.70 и так далее
4. Да, у каждого столбца есть цена. Как я должен назвать свой столбец базы данных?
5. Что представляет собой диапазон?
Ответ №1:
Вариантом может быть определение столбца price_range
или prices
столбца в формате json и сохранение данных в виде пар ключ => значение, например: ‘11.01-12:00’=> 11.50
В вашем файле миграции для таблицы добавьте столбец
$table->json('prices');
И в вашем классе модели укажите, чтобы привести prices
столбец как массив.
class MyModel extends Model
{
protected $casts = ['prices' => 'array'];
//... rest of the class code
}
Указав приведение, теперь вы можете использовать ассоциативный массив для хранения данных в столбце, вы можете работать с php-массивами для хранения и обновления данных.
$myModel = new MyModel;
$myModel->prices = [
'11.01-12.00' => 11.50,
'12.01-13.00' => 12.35,
//...
'29.01-30.00' => 29.82,
];
$myModel->save();
Для обновления данных
$myModel = MyModel::find(5);
$newPrices = [
'11.01-12.00' => 11.20,
'12.01-13.00' => 12.63,
//...
'29.01-30.00' => 29.05,
]
$myModel->update(['prices' => $newPrices]);
/OR to update price for a specific price range
$myModel->update(['prices->11.01-12.00' => 11.25]);
Документы Laravel:
Ответ №2:
В файле миграции таблицы базы данных определите столбец, вызываемый price
для хранения вашего значения.
$table->integer('price');
Сохраняйте свою цену как наименьший знаменатель для вашей валюты, выполняя любую арифметику, необходимую для выполнения преобразований в / из базы данных.
Вам не нужно создавать отдельные столбцы по разным ценам.
Редактировать 1
Основываясь на обновлении вашего вопроса о том, что информация находится в файле Excel, вы захотите использовать такой пакет, как Laravel Excel (нет смысла изобретать велосипед) для выполнения импорта.
Хороший учебник по импорту файла Excel здесь
Комментарии:
1. Я думаю, я мог бы объяснить, что вопрос сбивает с толку. В файле Excel у меня есть такие столбцы; 11.01-12.00, 12.01-13.00, …, 29.01-30.00. А содержимое столбца — это цена. Я хочу перенести файл в базу данных MySQL. Что мне делать?
2. @Willywongka Да, это довольно важная информация, которую следует опустить в вашем вопросе. Возможно, вы захотите обновить его, чтобы объяснить, что вы импортируете данные из файла Excel.
3. Извините, что сбил вас с толку.
4. @Willywongka Не беспокойтесь. Внес обновление, которое должно помочь.
5. Я думаю, вы можете использовать столбец varchar, прежде чем вставлять диапазон цен в столбец varchar, преобразовать в varchar