Laravelでenumをどこに置くか/どう扱うか?
質問
Laravelには
a
<select>
フォームヘルパー
で、これは入力として辞書を取ります。私は、これらすべての値を一カ所に集めておきたいと思っています。例えば、次のような列挙型があるとします。
$phoneTypes = [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
];
これは、ビュー/テンプレートとデータベースの両方で使用したいものです。
Schema::create('customers', function (Blueprint $table) {
$table->increments('id');
$table->enum('pri_phone_type',array_keys($phoneTypes));
...
});
- これらを置くのに推奨される場所はありますか?
- すべてのビューで簡単にアクセスできるように、これらをグローバルにすることは可能ですか?
どのように解決するのですか?
???? アップデート:PHP8.1ではついにenumのネイティブサポートが実現しました! ????????
詳しくはこちらをご覧ください。
https://stitcher.io/blog/php-enums https://php.watch/versions/8.1/enums https://www.php.net/manual/en/language.enumerations.php
以下の私のオリジナルの回答はもう適用されませんが、もしあなたが古いバージョンのPHPで作業しているならば....
元の回答
enumを処理するためのいくつかのオプションがあります。しかし、いくつか見ていく前に、まず、私は強くあなたに
ではなく
を使用することを強くお勧めします。
enum
のカラムタイプを使用します。
データベースの列挙型は、多くの理由で問題があります。例えばこの記事を読むことをお勧めします。
http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/
それでは、他の選択肢をいくつか見てみましょう。
Laravelのコンフィグを使用する
Laravelを使用しているので、非常にシンプルなオプションの1つは、設定ファイルにオプションの配列を貼り付けることです。
新しいファイルを作成するとします。
config/enums.php
を以下のように作成します。
return [
'phone_types' => [
'CELL' => "Cellular",
'HOME' => "Home",
'WORK' => "Work",
]
];
これで
config('enums.phone_types')
にアクセスできるようになりました。
PHP パッケージを使用する
@Banfordの回答は、クラス定数で基本的な列挙型の振る舞いをする方法を示しています。もしそのアプローチが好きなら、この記事と、このコンセプトに基づいて強く型付けされた列挙型を提供するパッケージを見ることをお勧めします。
https://stitcher.io/blog/php-enums
https://github.com/spatie/enum
このようなクラスを作成することになります。
/**
* @method static self cell()
* @method static self home()
* @method static self work()
*/
class PhoneTypes extends Enum
{
}
そして、今度は
PhoneTypes::home()
をアプリ内で呼び出すことができます。必要であれば、そのパッケージのドキュメントをチェックして、値のマップを作成する方法を確認してください。
DBのリレーションシップを利用する
もし、あなたが
本当に
オプションをデータベースで管理したいのであれば、私なら別の
phone_types
データベーステーブルを作成し
customers
テーブルとの関係を作成します。これは
やはり
を使うよりもずっと良い選択肢です。
enum
カラムタイプを使用するよりも良い選択肢です。
関連
-
[解決済み】 $_SERVER['DOCUMENT_ROOT'] と $_SERVER['HTTP_HOST'] の違いについて]
-
[解決済み] $wpdb->update または $wpdb->insert を実行すると、引用符の前にスラッシュが追加される
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] ある文字列が特定の単語を含んでいるかどうかを確認するにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] 列挙型をサブクラス化して、新しい要素を追加することはできますか?
-
[解決済み] enumとは何か、なぜ有用なのか?
-
[解決済み] Laravel Eloquentを使用して複数のWhere句クエリを作成する方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】接続の取得に失敗しました: php_network_getaddresses: getaddrinfo failed: 名前またはサービスが不明
-
[解決済み】move_uploaded_fileは、「failed to open stream: Permission denied" というエラーが出る
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】stdClassクラスのオブジェクトが文字列に変換されない。
-
[解決済み】pdo - 非オブジェクトのメンバー関数prepare()への呼び出し【重複】。
-
[解決済み】Xampp ローカルホスト/ダッシュボード
-
[解決済み】Chrome net::ERR_INCOMPLETE_CHUNKED_ENCODING エラーが発生しました。
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない