質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

4874閲覧

Laravel5で一回の新規登録で複数のレコードを登録するにはどうすれば良いですか

qwe001

総合スコア133

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

1グッド

0クリップ

投稿2016/08/09 04:58

新規登録をする際、Viewに3つのinput textタグがあり、登録ボタンを押すと、
データベース上に3つのレコードが登録されるという機能の実装を考えております。
この3つの入力枠は全て入力必須です。また、表示順といった概念を保持する必要があります。

そこで次のような記述をしてあります。

View

{!! Form::open(['url' => route("/")]) !!} {{ csrf_field() }} {!! (Form::text('text') !!} {!! (Form::text('text') !!} {!! (Form::text('text') !!} {!! Form::close() !!}

Controller

public function create(Request $request) { $test = new \App\Test(); $test -> position = 1; // ここが一度の登録で1,2,3で登録できるようにしたいです $test -> text = $request -> text; // Viewの input text name="text" の値をDBのtextカラムに登録します。 $test -> save(); }

DBに登録されるレコードのイメージとしては次のようなものです。

テーブル "public.tests" 列 | 型 | 修飾語 ------------+--------------------------------+----------------------------------------------------------- id | integer | not null default nextval('tests_id_seq'::regclass) text | text | not null position | integer | not null default 0 created_at | timestamp(0) without time zone | updated_at | timestamp(0) without time zone | id | text | position | created_at | updated_at ----+------+----------+---------------------+--------------------- 1 | A | 1 | 2016-08-09 13:00:00 | 2016-08-09 13:00:00 2 | B | 2 | 2016-08-09 13:00:00 | 2016-08-09 13:00:00 3 | C | 3 | 2016-08-09 13:00:00 | 2016-08-09 13:00:00 4 | D | 1 | 2016-08-09 14:00:00 | 2016-08-09 14:00:00 5 | E | 2 | 2016-08-09 14:00:00 | 2016-08-09 14:00:00 6 | F | 3 | 2016-08-09 14:00:00 | 2016-08-09 14:00:00

Viewに表示順を入力する欄はなく、input text の一番上が position = 1 次が 2 最後が 3 といった風に登録されるようにしたいです。
hiddenなどで値を送信すると良いでしょうか?

実際のテーブルではこの複数登録する部分はリレーションテーブルになっており、
もっと複雑ですが一旦は複数行の登録を可能にする方法が知りたいです。
何か良いアイデアはございますでしょうか?

KiyoshiMotoki👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ごめんなさい自己解決しました。
いや、自己解決というほど解決にはなっていないコードですが。
for文を使うのはたぶん正解じゃないとは思いますが一応...
おそらくsaveManyとかそういうのを使うのが正解なのでしょうがひとまずできたコードを載せておきます。

{!! Form::open(['url' => route("/")]) !!} {{ csrf_field() }} {!! (Form::text('text1') !!} {!! (Form::text('text2') !!} {!! (Form::text('text3') !!} {!! Form::close() !!}
public function store($test, $request) { $test -> topic = $request -> topic; $test -> date = $request -> date; $test -> save(); for($i = 1; $i < 4; $i++){ $test_positions = new \App\TestPosition(); $test_positions -> test() -> associate( $test ); // testテーブルのIDをキャッチしてtest_idカラムにセット $test_positions -> position = $i; $test_positions -> text = $request -> input('text' . $i); // Viewのname属性のtext1,text2,text3のvalueを順にtextカラムにセット $test_positions -> save(); // 一度のstoreでtest_positionsテーブルに3つのレコードを登録 } }

投稿2016/08/09 08:14

編集2016/08/09 09:41
qwe001

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

qwe001

2016/08/09 10:09 編集

さらに追記。updateの場合の書き方 where使うのってSQLインジェクション的にまずい気はするけど... 表示順については変更することはない想定なので、updateから除外しています。 ``` public function update($test, $request) { $test -> topic = $request -> topic; $test -> date = $request -> date; $test -> save(); for($i = 1; $i < 4; $i++){ $test_choices = Test::where('test_id', $test -> id) -> first(); $test_choices -> text = $request -> input('text' . $i); $test_choices -> save(); } } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問