Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 27.11.2017 11:27:30

Запись данных в БД из массива

Laravel Framework v5.5.20
PHP Version 7.1.6
Операционная система и её версия: windows 10

Добрый день.
Сталкнулся со следующей проблемой.
В БД есть 2-е таблицы:

check:
id,check_id,value
product:
id,product_id,value

Из формы post запросом приходит следующий массив:

array:7 [▼
  "_token" => "9rMpvH21d22EngePxhEdqPcNCQC7o8wqJpTyZCUp"
  "check_id_2" => "on"
  "orders_id" => "10"
  "product_id_2" => "6"
  "check_id_3" => "on"
  "product_id_3" => "7"
  "product_id_1" => null
]

Передо мной предстала задача достать данные из массива и записать их в нужные таблицы.
На выходе должно получиться следующее.
Записи начинающиеся на "check_id_" заносим в таблицу check, а "product_id_" - в product.
Примерно так:

check:
id,check_id,value
1, 2, on
2, 3, on
product:
id,product_id,value
1, 2, 6
2, 3, 7
3, 1, 0

Подскажите, пож-та, как это можно реализовать?

Не в сети

#2 27.11.2017 11:33:18

Re: Запись данных в БД из массива

Это реально вызывает такой затык?

Не в сети

#3 27.11.2017 12:02:14

Re: Запись данных в БД из массива

Возможно, большинству это не проблема. Но новичку вроде меня вызывает трудности. Затык заключается в том, как отделить нужные записи из массива и записать их.

Не в сети

#4 27.11.2017 13:19:34

Re: Запись данных в БД из массива

А почему в таблице check есть id и check_id? И в product также?

В цикле создавай записи через create:

PHP
$model->create([
    
'product_id' => array[$i],
    
'value' => $value
]);

Если хочешь одним запросом в БД сразу много записей добавить, подготовь массив в таком формате:

PHP
$products = [
    [
'product_id' => array[$i], 'value' => $value],
    [
'product_id' => array[$i], 'value' => $value],
    ....
];

И потом вставляй в БД одним запросом:

PHP
DB::table('product')->insert($products);

Не в сети

#5 27.11.2017 13:54:44

Re: Запись данных в БД из массива

Спасибо за ответ.

А почему в таблице check есть id и check_id? И в product также?

Это упрощенный вариант, чтобы показать суть проблемы без "пыли". Реальный пример сложнее.

$model->create([    'product_id' => array[$i],    'value' => $value]);

Правильно ли я понимаю, array[$i] - это весь массив, который я получаю? Если так, то каким образом указать какие данные необходимо записать для таблицы check, а какие для product? И второй вопрос как отделить  от ключей массивов текст check_id_ и product_id_, чтобы остались только  значения id?

Не в сети

#6 27.11.2017 14:17:24

Re: Запись данных в БД из массива

Правильно ли я понимаю, array[$i] - это весь массив, который я получаю? Если так, то каким образом указать какие данные необходимо записать для таблицы check, а какие для product? И второй вопрос как отделить  от ключей массивов текст check_id_ и product_id_, чтобы остались только  значения id?

Я просто пример привел как встввлять данные в БД. Как работать со своим массивом тебе виднее, я здесь не отвечу. Возможно, ты захочешь делать что-то вроде $array['product_id_' . $i]

Не в сети

#7 27.11.2017 15:05:07

Re: Запись данных в БД из массива

Как записать данные я как раз знаю. )))
Тут основная задача как-раз была отсечь ненужный текст из ключей и исходя от названий ключей заносить данные в нужную таблицу.
Всё равно огромное спасибо за подсказку.)))

Не в сети

#8 27.11.2017 16:34:35

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Запись данных в БД из массива

А если попробовать что то типо <input name="product_id[{{ $id }}]" /> и с чеком так же поступить. Тогда на сервер улетит нужный массив.
Как варриант

Не в сети

#9 27.11.2017 17:48:03

Re: Запись данных в БД из массива

Отлично.
Теперь я получаю такие массивы

array:2 [▼
  "check_id" => array:2 [▼
    2 => "on"
    3 => "on"
  ]
  "product_id" => array:3 [▼
    2 => "6"
    3 => "7"
    1 => null
  ]
]

С этим уже можно работать.
Большое спасибо

Не в сети

Подвал раздела