Хранение данных массива в базе данных с Laravel - PullRequest
0 голосов
/ 12 июля 2020

Мои данные формы возвращают этот json файл, который я должен хранить как несколько строк в базе данных.

JSON

    {
     "name": john,
     "department" : "IT"
     "type" : ['annual', 'private'],
     "from_date" : ['2020-09-09', '2020-10-08'],
     "to_date" : ['2020-09-12', '2020-10-15'],
     "hours" : ['06','09'],
   }

Я хочу сохранить его в базе данных используя laravel, и результат должен быть

  id      name    department   type     from_date     to_date       hours
  1       John       IT         annual   2020-09-09   2020-10-08      06
  2       John       IT         Private  2020-09-12   2020-10-15      09

Вот мой код laravel, я пробовал это, но не работает нормально, пожалуйста, мне нужна помощь, я новичок в laravel. Спасибо

   function getLeave(Request $request){
         $leaveInfo = new LeaveTable();
         $leaveInfo->name = $request->name;
         $leaveInfo->department = $request->department;
         if(count($leaveInfo->type >= 1)){
          for( $i = 0; $i < count($leaveInfo->type); $i++){
           $leaveInfo->type = $request->type[$i];
          }
         }
         if(count($leaveInfo->date_from >= 1)){
             for( $i = 0; $i < count($leaveInfo->date_from); $i++)
                   $leaveInfo->date_from = $request->date_from[$i];
                   }
              }
        if(count($leaveInfo->date_to >= 1)){
             for( $i = 0; $i < count($leaveInfo->date_to); $i++)
                   $leaveInfo->date_to = $request->date_to[$i];
                   }
              }
         if(count($leaveInfo->hours >= 1)){
            for( $i = 0; $i < count($leaveInfo->hours); $i++){
               $leaveInfo->hours = $request->hours[$i];
             }
         }
                         
           $leaveInfo->save();
        }

1 Ответ

1 голос
/ 12 июля 2020

Для этого вам необходимо создать текст столбцы для столбцов 'type', 'from_date', 'to_date', 'hours'.

При миграции

$table->text('type');
$table->text('from_date');
$table->text('to_date');
$table->text('hours');

Затем в модальном окне вам нужно добавить эти столбцы в массив cast .

В модальном

protected $casts = [
    'type' => 'array',
    'from_date' => 'array',
    'to_date' => 'array',
    'hours' => 'array',
];

Тогда в контроллере это просто.

В контроллере

$leaveInfo = new LeaveTable();

$leaveInfo->name = request->name;
$leaveInfo->department = request->department;
$leaveInfo->type = request->type;
$leaveInfo->from_date = request->from_date;
$leaveInfo->to_date => request->to_date;
$leaveInfo->hours => request->hours;

$leaveInfo->save();

Боковое примечание

  • Переименуйте ваше модальное имя с «LeaveTable» на «Leave» или «LeaveInfo».
  • Переименуйте эти столбцы во множественное число, поскольку они содержат много данных. ex: 'types'
  • Существует альтернативный способ записи этого кода контроллера.
LeaveTable::create([
    'name' => request('name'),
    'department' => request('department'),
    'type' => request('type'),
    'from_date' => request('from_date'),
    'to_date' => request('to_date'),
    'hours' => request('hours'),
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...