前提・実現したいこと
株のポートフォリオを管理できるwebアプリを作っているのですが、ユーザー入力にいくつかバリデーションを実装したいです。
OS mac10.13
PHP7.1.14
laravel 5.6
発生している問題・エラーメッセージ
投資元本や証券コードを入力してもらうようにするのですが、投資元本がいくつもあるのはおかしいので、一つレコードがDBに記録されたら投資元本の値を再度入力出来ないようにしたいです。(現金(CP)にも同様の処理をおこないたいです)
↓に間違っている状況のスクショを載せます
該当のソースコード
現状、コントローラーにバリデーションを組んでいます。(app\Http\Controllers)
public function addPrincipal(Request $request){ //バリデーションの設定。filled(項目が空でないか)などの検証ルールは設定できました。 $validator = Validator::make($request->all(),[ 'principal' => 'filled|min:1|integer' ]); //下記コードでは複数入力出来てしまいました //$validator = Validator::make($request->all(),[ //'principal' => 'filled|min:1|integer', //'user' => 'unique:assets,user_id' //]); if($validator->fails()){ return redirect('/make') ->withErrors($validator) ->withInput(); } //ユーザーが入力した投資元本(principal)をDBに記録 $asset = new Asset; $asset->user_id = $request->user()->id; $asset->principal = $request->principal; $asset->save(); return redirect('/make'); }
投資元本の入力箇所(resources\views)
<form method="POST" action="/make/principal"> {{ csrf_field() }} @if($errors->has('principal')) <tr><th>ERROR</th><td>{{$errors->first('principal')}}</td></tr> @endif <tr><th>投資元本: </th><td><input type="text" name="principal" value="{{old('principal')}}"></td></tr> <tr><th></th><td><button type="submit">設定</button></td></tr> </form>
投資元本を管理しているテーブル(assets)
id user_id principal created_at updated_at ---------- ---------- ---------- ------------------- ------------------- 6 5 1250317 2018-07-01 08:19:40 2018-07-01 08:19:40 23 2 1000000 2018-07-01 15:16:02 2018-07-01 15:16:02 26 1 1000000 2018-07-02 00:29:53 2018-07-02 00:29:53
試したこと
公式ドキュメントを読んだのですが、、、
理解力に乏しく分かりそうで分かりませんでした。。。
(↓のページの使用可能なバリデーションルール欄の「一意(データベース)」の項目などを読みました。)
https://readouble.com/laravel/5.6/ja/validation.html
回答2件
あなたの回答
tips
プレビュー