Я получаю массив в массиве данных «Цилиндры» из POST:
Array ( [serie] => Array ( [0] => 1234 [1] => 3545 ) [seriesap] => Array ( [0] => 1234234 [1] => 345345 ) [type] => Array ( [0] => 4546 [1] => csdfwe ) [admission] => Array ( [0] => 04-05-2015 [1] => 04-05-2015 ) [invoice] => Array ( [0] => fei76867 [1] => feiasodjf ) )
Теперь поля внутри ключей: серийный, тип, вход и т. Д. Не меняются, но информация внутри этих клавиш меняется, я имею в виду, что там может быть даже 15 предметов.
В конце мне нужно сохранить в базу данных:
$cylinder = new Cylinder(); $cylinder->serie = ??; $cylinder->seriesap = ??; $cylinder->type = ??; $cylinder->admission = ??; $cylinder->invoice = ??; $cylinder->save
Как я могу выполнить эту задачу и сохранить все цилиндры?
Я пробовал все предсказания, что я мог думать, что ничего не работает.
/ edit /
Это то, что я делаю до сих пор:
$cyldata = $_POST['cylinder']; //this is the post from top. $num_elements = 0; while($num_elements < count($cyldata['serie'])){ $cylinder = new Cylinder(); $cylinder->serie = $cyldata['serie'][$num_elements]; $cylinder->type = $cyldata['type'][$num_elements]; $cylinder->admission = $cyldata['admission'][$num_elements]; $cylinder->seriesap = $cyldata['seriesap'][$num_elements]; $cylinder->save $num_elements++; }
Но это кажется уродливым, все эти сбережения не чувствуют себя хорошо. Грязное решение, если вы спросите меня.
Во-первых, вам нужно преобразовать ваши входные данные в другой формат:
$cyldata = $_POST['cylinder']; //this is the post from top. $num_elements = 0; $sqlData = array(); while($num_elements < count($cyldata['serie'])){ $sqlData[] = array( 'serie' => $cyldata['serie'][$num_elements], 'type' => $cyldata['type'][$num_elements], 'admission' => $cyldata['admission'][$num_elements], 'seriesap' => $cyldata['seriesap'][$num_elements], 'invoice' => $cyldata['invoice'][$num_elements], // you miss this field, aren't you? 'created_at' => Carbon\Carbon::now(), // only if your table has this column 'updated_at' => Carbon\Carbon::now(), // only if your table has this column ); $num_elements++; }
Во-вторых, используйте построитель запросов Fluent для создания вставки в пакет:
DB::table('table_name')->insert($sqlData);
Примечание: created_at
и updated_at
появляются здесь, если ваша таблица имеет это поле. При работе с моделью Eloquent это поле обновляется автоматически. Однако мы не используем Eloquent, поэтому нам нужно назначить значение для этого поля вручную.
Поскольку у вас есть массив для вставки данных в базу данных, вы можете попробовать create
метод из модели:
Cylinder::create($array);
но на самом деле нужен key
массива, который будет field_name
в вашей базе данных. Или вы можете сделать это с помощью построителя запросов:
DB::table('table_name')->insert($array);
и снова требуется установить key
массива как field_name
в вашей базе данных.
Я не знаю, что заставило вас использовать глобальный массив $_POST
, чтобы получать данные от пользователя.
Возможно, это то, чего вы хотите.
/** * Store the form inputs in the table * * @param Request $request */ public function store( Request $request ) { $data = Input::get(); for($i = 0; $i < count($data['serie']); $i++) { $c = new Cylinder(); $c->serie = $data['serie'][$i]; $c->type = $data['type'][$i]; $c->admission = $data['admission'][$i]; $c->seriesap = $data['seriesap'][$i]; $c->save(); // fixed typo } }