🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Q&A

解決済

1回答

3094閲覧

laravel 会員登録時に10桁の数字を付与

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

0グッド

1クリップ

投稿2019/09/09 03:48

編集2019/09/10 06:14

laravelでregister機能を作っています。
userレコードを作成する際に、固有のIDとは違う10桁の数字を付与したいです。
一番最初のuserには1000000001、2番目のuserには1000000002という風に
1ずつ数値を増やしたいです。
viewにhiddenで値を持たせればよいでしょうか。
その際のcontrollerの処理がよくわかってないです。

html

1<main class="main_auth"> 2 <div class="layout_main"> 3 <div class="area_auth area_register"> 4 <div class="img"> 5 <img src="{{ asset('img/logo_vertical.svg') }}"> 6 </div> 7 <div class="text"> 8 <p class="ttl">{{ __('Make Account') }}</p> 9 </div> 10 <form method="POST" action="{{ route('register') }}" novalidate> 11 @csrf 12 <input type="hidden" name="type" value="normal"> 13 <ul class="list_register"> 14 <li> 15 <article> 16 <p class="ttl_list"> 17 {{ __('Or, Register With Form') }} 18 </p> 19 <div class="cnt"> 20 <small class="attention_required"> 21 {{ __('Register account') }} 22 </small> 23 <ul class="list_form_auth"> 24 <li class="required"> 25 <div class="wrap_input"> 26 <input id="email" type="email" class="@error('email') is-invalid @enderror" name="email" placeholder="{{ __('Enter E-Mail Address') }}" 27 value="{{ old('email') }}" required autocomplete="email" autofocus> 28 @error('email') 29 <span class="invalid-feedback" role="alert"> 30 <strong>{{ $message }}</strong> 31 </span> 32 @enderror 33 </div> 34 </li> 35 <li class="required"> 36 <div class="wrap_input"> 37 <input id="password" type="password" class="@error('password') is-invalid @enderror" name="password" placeholder="{{ __('Enter Password') }}" 38 required autocomplete="new-password"> 39 @error('password') 40 <span class="invalid-feedback" role="alert"> 41 <strong>{{ $message }}</strong> 42 </span> 43 @enderror 44 </div> 45 </li> 46 <li class="required"> 47 <div class="wrap_input"> 48 <div class="wrap_input"> 49 <input id="last_name" type="text" class="@error('last_name') is-invalid @enderror" name="last_name" placeholder="{{ __('Enter last name') }}" 50 value="{{ old('last_name') }}" required autocomplete="last_name"> 51 @error('last_name') 52 <span class="invalid-feedback" role="alert"> 53 <strong>{{ $message }}</strong> 54 </span> 55 @enderror 56 </div> 57 <span class="unit_min"></span> 58 <div class="wrap_input"> 59 <input id="first_name" type="text" class="@error('first_name') is-invalid @enderror" name="first_name" placeholder="{{ __('Enter first name') }}" 60 value="{{ old('first_name') }}" required autocomplete="first_name"> 61 @error('first_name') 62 <span class="invalid-feedback" role="alert"> 63 <strong>{{ $message }}</strong> 64 </span> 65 @enderror 66 </div> 67 </div> 68 </li> 69 </ul> 70 <div class="btnarea_step"> 71 <button type="submit" class="btn_"> 72 {{ __('Register account') }} 73 </button> 74 </div> 75 </div> 76 </article> 77 </li> 78 </ul> 79 </form> 80 </div> 81 </div> 82</main>

php

1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Models\User; 6use App\Http\Controllers\Controller; 7use Illuminate\Support\Facades\Hash; 8use Illuminate\Support\Facades\Validator; 9use Illuminate\Foundation\Auth\RegistersUsers; 10 11class RegisterController extends Controller 12{ 13 /* 14 |-------------------------------------------------------------------------- 15 | Register Controller 16 |-------------------------------------------------------------------------- 17 | 18 | This controller handles the registration of new users as well as their 19 | validation and creation. By default this controller uses a trait to 20 | provide this functionality without requiring any additional code. 21 | 22 */ 23 24 use RegistersUsers; 25 26 /** 27 * Where to redirect users after registration. 28 * 29 * @var string 30 */ 31 protected $redirectTo = '/mypage'; 32 33 /** 34 * Create a new controller instance. 35 * 36 * @return void 37 */ 38 public function __construct() 39 { 40 $this->middleware('guest'); 41 } 42 43 /** 44 * Get a validator for an incoming registration request. 45 * 46 * @param array $data 47 * @return \Illuminate\Contracts\Validation\Validator 48 */ 49 protected function validator(array $data) 50 { 51 return Validator::make($data, [ 52 'last_name' => 'required|string|max:255', 53 'first_name' => 'required|string|max:255', 54 'type' => 'required|string|string|max:20', 55 'email' => 'required|string|email|max:255|unique:users', 56 'password' => 'required|string|min:10', 57 ]); 58 } 59 60 /** 61 * Create a new user instance after a valid registration. 62 * 63 * @param array $data 64 * @return \App\User 65 */ 66 protected function create(array $data) 67 { 68 $user = User::create([ 69 'last_name' => $data['last_name'], 70 'first_name' => $data['first_name'], 71 'email' => $data['email'], 72 'type' => $data['type'], 73 'password' => Hash::make($data['password']), 74 ]); 75 } 76} 77

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/09/09 03:52

DB上での自動付与なのか、Laravel上で一定のアルゴリズム下で付与するのか、によって回答も大きく変わりそうな予感。どちらの路線で行くのか明瞭にしてあげた方が回答者の負担も減ります。
m.ts10806

2019/09/09 04:17 編集

用途次第なので、用途もきちんと書いてください。それ次第ではDBに持つ必要すらもないかもしれません。 DBに保管するとしても法則が決まっているなら固定値更新と同じ。 hiddenは悪手です。3番目に登録したのに1000000002とかになる可能性もありますし。
tacsheaven

2019/09/09 04:16

ユーザーが削除されたとき、その歯抜けになった値を使い回すかどうかでもまた変わってきますかね。まあたいていの場合、使い回さないと思いますが。
m.ts10806

2019/09/09 05:39

「一定のアルゴリズム下」とそのままコピペで書いてますが、ご自身で意味が分かってないのなら指摘くれた人に聞いたほうが良いかと。「何も考えてない」ということでよろしいでしょうか。 m6uさんが聞きたいのは「LaravelでそういったIDの発行のアルゴリズムがあるんだよね?」ということだと思います。単にそのまま「一定のアルゴリズム下で付与」と書いたところで「それって何よ」としかなりません。
退会済みユーザー

退会済みユーザー

2019/09/09 05:43

m.ts10806 さん すいません、いちいち絡んでこないでください。笑
m.ts10806

2019/09/09 05:45

解決したいなら、まともな質問にしてから言ってください。
退会済みユーザー

退会済みユーザー

2019/09/09 05:57

cartiさん mtsさんが聞かなければ、結局誰かがが同じことを確認しなきゃいけないこと。 自分より早くmtsさんが聞いているだけのことで、絡んでいるわけじゃないことです。 めんどくセーとあなたが感じているのと同じように回答者はあなたに対しては、メンドクセー質問者と感じますよ。
m.ts10806

2019/09/09 05:58 編集

いずれにしても要件が詰められてないか、全て提示されてないのでアドバイスを得るのは難しいと思いますよ。Laravelに限って考えなくてもできるか?という話もありますし。 例えば1999999999の次はどうするの?とか。仕様・設計をどこまで考えてるのか分からないので回答しようがありません。決めるのは当然作る人なのでそれが決まらない事にはアドバイスも何もないですよ。 人に絡むなとか言う前に完璧な質問をしてから言ってください。回答つかないのはたいてい質問要件が不明瞭か・丸投げ過ぎることからです。
guest

回答1

0

ベストアンサー

php

1   protected function create(array $data) 2 { 3 // 最後に登録されたユーザーの10桁の数値を取得 4 $last_user = DB::table('users')->get()->last(); 5 if (isset($last_user)) { 6 $max_number = $last_user->unique_number; 7 // 1人目のユーザーの場合は1000000000を付与 8 } else { 9 $max_number = 1000000000; 10 } 11 $user = User::create([ 12 'last_name' => $data['last_name'], 13 'first_name' => $data['first_name'], 14 'last_name_kana' => $data['last_name_kana'], 15 'first_name_kana' => $data['first_name_kana'], 16 'email' => $data['email'], 17 'type' => $data['type'], 18 'password' => Hash::make($data['password']), 19 'unique_number' => $max_number + 1 20 ]); 21 }

投稿2019/09/09 08:46

編集2019/09/10 05:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/09/09 08:52

> $user['10digits_id'] = 1000000000 + $user['id']; これが解なら、悪手。 データベースに持たせる意味もないし、Model に アクセサを持たせるべき。
mikkame

2019/09/09 09:03

LaravelだとアクセサではなくMutatorが正しそうです。 また、仮にこの実装にするとしてもcreateをオーバーライドせずとも bootからcreatedをフックさせる方が良いでしょう。 またはTraitでも良いです
退会済みユーザー

退会済みユーザー

2019/09/09 09:08

@mikkame 自分の回答としてはミユーテタではなく、`getDigitsIdAttribute()` を定義するという回答なので、アクセサです。`id` + 1000000000 で取り出すだけなら、ミユーテタも不要と思います。
mikkame

2019/09/09 09:17

getterとsetterを合わせてミューテーターだと思ってた件。 勉強になりました
退会済みユーザー

退会済みユーザー

2019/09/09 09:33

@Kosuke_Shibuya さん コメントありがとうございます。カラムを用意する必要がなくmodelにアクセサを持たせて そこから取得した方が良いという解釈でよろしいでしょうか?
mikkame

2019/09/09 09:34

そういう事です。
m.ts10806

2019/09/10 01:16

削除依頼が受け入れられなかったからと雑に終わらせるのは如何なものかと。 私も最初のほうでコメントに「DBに持つ必要すらもないかもしれません。」と書いてますが そこをスルーしては何も解決になりません。結局要件不明瞭のまま、雑に終わらせているので 誰のためにもなりませんよ。もちろんこれを作ってるあなた自身のためにも。
退会済みユーザー

退会済みユーザー

2019/09/10 05:18

m.ts10806 さん ご指摘ありがとうございます。 現在つくっているサービスで匿名でコメントする機能があるのですが、匿名ユーザーの自作自演行為を防ぐためにこのカラムが必要でした。
m.ts10806

2019/09/10 05:26

数字よりもランダムな大文字小文字の組み合わせの文字列(英数字混在)のほうが良いでしょうね。そのような前提があるなら書いてもらったらもっと的確なアドバイスができるんですけど。。 「やりたいこと」と「より好ましい手法」は必ずしも一致しません。
退会済みユーザー

退会済みユーザー

2019/09/10 05:48

@m.ts10806 さん 失礼いたしました。10桁の数字を元に英数字混在のランダムの値を算出しようと考えています。
m.ts10806

2019/09/10 05:53

でも結局この自身の回答で解決と思ってるんですよね? 詰めたいなら解決済み解除して要件を具体的に質問本文にするか 追加要件なら別質問としてください。 今までの応対の感じから余程きちんと質問を書かないとアドバイスは得られにくいとは思いますが。
退会済みユーザー

退会済みユーザー

2019/09/10 05:59

@m.ts10806 さん この質問に関しては解決済みですので別で質問したいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問