laravel5.1で、プルダウンの都道府県コードをconfig.phpで持つか、テーブルで持つか検討してみた。

laravel5.1で、プルダウンの都道府県コードをconfig.phpで持つか、テーブルで持つか検討してみた。

laravelで定数を定義する場合は、configフォルダ内に「好きな名前.php」で記述出来る。

config/pref.php

// 使う時には、ファイル名と配列番号をドット区切りで指定する
echo \Config::get(‘pref.1’); // 北海道 と表示される

あっさりと出来るのが魅力だけど、Usersテーブルの住所都道府県フィールドには、1という値が入っているだけなので、SELECTで検索できない!
と、なると素直にprefテーブルを生成するしか無いけど、プルダウンの種類だけテーブル追加するのもな~。
性別(男性・女性)とか利用可・利用不可みたいな、2レコードしかないようなテーブルは作りたくない!

そこで、OTLT(One True Lookup Table)という考え方が出てきます。
http://gihyo.jp/dev/serial/01/sql_academy2/000301

種別・コード・名称の3カラムだけの単純なテーブルを1個つくればOK!
種別カラム=テーブル名(種類)という考えですな。

よし、これで行こう!と思ったけどEloquentだと外部キー1つしか選べない…。
しょうがないので、取得時にJOIN句で結合して、where句で種別カラム指定すれば、検索対象にしよう。

まずは、config/pref.php と Config::get(‘pref’) をテーブルに置き換えられるようにしてみた。
やる事は、以下の通り。多い(^_^;)
1, テーブルを生成(php artisan make:migration create_words_table –create=words)
2, テーブルのクラス生成(php artisan make:model Word)
3, サービスプロバイダーを作成(php artisan make:provider WordServiceProvider)
4, サービスプロバイダーの設定( $this->app->bindとか)
5, ファサードクラスを作成()
6, ファサードエリアスの設定
7, ファサードを使ってみる

1, テーブルを生成(php artisan make:migration create_words_table –create=words)

2, テーブルのクラス生成(php artisan make:model Word)
テーブルの内容を配列で返す関数を作っておく

そのままだと、blade.phpで使えないのでサービスプロバイダ化してみる(Controller側から渡すなら、やらなくても良い)
3, サービスプロバイダーを作成(php artisan make:provider WordServiceProvider)
app/Providers/WordServiceProvider.phpが生成される

4, サービスプロバイダーの設定

5, ファサードクラスを作成(artisanでは作れない?)
app/Facades/Word.phpを自分で生成。

6, ファサードエリアスの設定
config/app.phpに、プロバイダとエイリアスを設定

7, ファサードを使ってみる
edit.blade.php

これで、Config::get(‘pref’)と同じように使えるし、DBテーブル1つで管理・運用できる!
bladeファイルで、テーブルのプルダウンを表示したいだけなのに一苦労だな…。
めんどくせえ、めんどくせえ、マウスをクリックすらめんどくせえ~。
参照URL: https://laravel10.wordpress.com/2015/04/27/%E3%83%95%E3%82%A1%E3%82%B5%E3%83%BC%E3%83%89/

ようやくフリーワード検索の所が作れるようになった。
app/Http/UsersController.php

コメントを残す

メールアドレスが公開されることはありません。