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

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

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

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

Laravel 5

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

Q&A

2回答

4389閲覧

Laravelを使ってPOSTでデータの受け渡し

tky31

総合スコア17

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2018/09/13 12:58

Laravelを使って新規作成フォームを作成いたしました。

ただ新規作成のフォームからPOSTでデータを受け渡そうとすると、必要なデータが渡せなくて保存できません。 PHP、Laravelに詳しい方、ご教授いただけないでしょうか。

【エラー内容】

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'plan_id' cannot be null (SQL: insert into `corps` (`name`, `plan_id`, `credit_key`, `payment_status`, `payment_method_id`, `payment_date`, `postal_code`, `prefecture_id`, `address1`, `address2`, `updated_at`, `created_at`) values (ほげほげほげお, , , 支払済み, , , 123-1234, , 宮城町, 宮城333-3333, 2018-09-13 12:44:21, 2018-09-13 12:44:21))

イメージ説明

上記のようなエラーが発生し、corpモデルの値は取得できているのですが、
ほかの紐づいたデータを取得することができません。

実際のコード、リレーションはこの様になっております
【corpモデル】

public function prefectures() { return $this->belongsTo('App\Models\Prefecture', 'prefecture_id'); } public function plans() { return $this->belongsTo('App\Models\Plan','plan_id'); } public function payment_methods() { return $this->belongsTo('App\Models\PaymentMethod', 'payment_method_id'); }

【 新規作成View】

<div class="nav"> <div class="col-md-6 col-md-offset-3"> <form method="post" action="{{ url('/corps') }}"> {{ csrf_field() }} <label for="name">NAME:</label> <input type="text" name="name" class="form-control"> <label for="payment_method_name" >支払い方法</label> <select class="form-control"> <option value="">選択してください</option> @foreach($payment_method as $payment_method ) <option value="{{ $payment_method->name }}">{{ $payment_method->name }}</option> @endforeach </select> <label for="plan">プラン:</label> <select class="form-control"> <option value="">選択してください</option> @foreach($plan as $plan) <option value="{{ $plan->name }}">{{ $plan->name }}</option> @endforeach </select> <div class="form-group"> <label for="name2">次回支払日:</label> <div class='input-group date' id='datepicker'> <input type='text' class="form-control datepicker"> <span class="input-group-addon"> <span class="glyphicon glyphicon-calendar"></span> </span> </div> </div> <label for="name2">支払い状況:</label> <input type="text" name="payment_status" class="form-control"> <label for="name2">郵便番号:</label> <input type="text" name="postal_code" class="form-control"> <label for="name2">都道府県:</label> <select class="form-control"> <option value="">選択してください</option> @foreach($prefecture as $prefecture) <option value="{{ $prefecture->name }}">{{ $prefecture->name }}</option> @endforeach </select> <label for="name2">住所1:</label> <input type="text" name="address1" class="form-control"> <label for="name2">住所2:</label> <input type="text" name="address2" class="form-control"> <!-- <div class="parent"> --> <!-- <div class="botton left"> --> <a href="{{ action('CorpsController@index', $corp) }}" class="btn btn-outline-secondary">一覧に戻る</a> <input type="submit" value="確認" class="btn btn-outline-success"></input> <input type="hidden" name="_token" value="{{csrf_token()}}"> <!-- </div> --> </div> </form>

【コントローラー】

public function store(Request $request) { $corp = new Corp(); $corp->name = $request->name; $corp->plan_id = $request->plan; #⇦ここの記述が分からない $corp->credit_key = $request->credit_key; $corp->payment_status = $request->payment_status; $corp->payment_method_id =$request->payment_method_id;#⇦ここの記述が分からない $corp->payment_date =$request->payment_date; $corp->postal_code =$request->postal_code; $corp->prefecture_id =$request->prefecture_id;#⇦ここの記述が分からない $corp->address1 =$request->address1; $corp->address2 =$request->address2; $corp->save(); return redirect('/'); }

コントローラーの記述方法がわからないので、そこを改善できれば、保存できるのでは?と思うのですが。。。
何かわかる方いらっしゃいましたらお教えいただけないでしょうか。
よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

Column 'plan_id' cannot be null // 訳: plan_idカラムにnullは入らないよ

plan_id が送信できておらずnullです。

本文の キャプチャ を見れば分かる通り、 plan_id が含まれていないですよね。

<select class="form-control">name 属性がないことが原因です。

http://www.htmq.com/html/form.shtml

name="名前"
スクリプト言語などから参照できるよう名前を指定する

formの基本を確認して下さい。

コントローラの記述に合わせるなら name="plan" が必要です。
他にも送信できていない項目がありますが同じ原因です。

投稿2018/09/14 02:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

確か...
他の<input>タグと同様に[name]属性を<select>タグにつければ、<option>タグの[value]を取得できたはずです。
もしかしたら取得は配列かも

html

1<select class="form-control" name="plan"> 2 <option value="">選択してください</option> 3 @foreach($plan as $plan) 4 <option value="{{ $plan->name }}">{{ $plan->name }}</option> 5 @endforeach 6</select>

投稿2018/09/13 15:14

randr

総合スコア202

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問