как правильно назвать столбец базы данных

#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