web-dev-qa-db-ja.com

Laravel-データベース、テーブル、および列の命名規則?

laravel雄弁なデータオブジェクトを使用してデータにアクセスしていますが、テーブル、列、外部/プライマリキーなどに名前を付ける最良の方法は何ですか?

たくさんの命名規則があります。 laravel雄弁なモデル。

私は次の命名規則を考えています:

  1. 特異なテーブル名(例:Post)
  2. 特異な列名(例:userId-postテーブルのユーザーID)
  3. テーブル名の複数の単語のキャメルケース(例:PostComment、PostReview、PostPhoto)
  4. 列名の複数の単語のキャメルケース(例:firstName、postCategoryId、postPhotoId)

そのため、コントローラーで同様の構文を使用できます。

$result = Post::where('postCategoryId', '4')->get();

このための推奨されるLaravelガイドラインはありますか?これらの命名規則を続行できますか?

誰かがより良い提案を持っている場合、私はそれらを聞いて非常に幸せになります。どうもありがとう!

24
The Dude

Laravelには独自の命名規則があります。たとえば、モデル名がUser.phpの場合、Laravel=は、クラス 'User'がそのファイル内にあることを期待します。また、usersUserテーブルも期待しますただし、モデルのテーブルプロパティを次のように定義することにより、この規則をオーバーライドできます。

    class User extends Eloquent implements UserInterface, RemindableInterface {
        protected $table = 'user';
    }

From Laravel=公式ドキュメント:

Eloquentに、ユーザーモデルに使用するテーブルを指示しなかったことに注意してください。別の名前が明示的に指定されていない限り、クラスの小文字の複数名がテーブル名として使用されます。したがって、この場合、Eloquentは、ユーザーモデルがユーザーテーブルにレコードを格納すると想定します。モデルで$tableプロパティを定義することにより、カスタムテーブルを指定できます。

他のテーブルのユーザーテーブルIDを外部キーとして使用する場合、リレーションの場合に自動的に使用できるように、user_idのようなスネークケースにする必要があります。繰り返しますが、関係関数で追加の引数を指定することにより、この規則をオーバーライドできます。例えば、

    class User extends Eloquent implements UserInterface, RemindableInterface {
        public function post(){
            return $this->hasMany('Post', 'userId', 'id');
        }
    }

    class Post extends Eloquent{
        public function user(){
            return $this->belongsTo('User', 'userId', 'id');
        }   
    }

Laravel雄弁な関係)のドキュメント

テーブル内の他の列については、好きな名前を付けることができます。

一度ドキュメントを読むことをお勧めします。

33
user4055288

ここにあなたが二人とも示したこれらの例には一般的に同意しません。

公式のLaravelドキュメント、特にEloquentのリレーションシップセッション( http://laravel.com/docs/4.2をご覧ください。/eloquent#relationships )。

テーブル名は複数形、つまりユーザーモデルの「ユーザー」テーブルにする必要があります。

また、列名はキャメルケースではなく、スネークケースにする必要があります。すでに回答されているのをご覧ください: Laravelのデータベース/モデルフィールド名の規則?

RedBeanORMのように見えることがあまりにも普通です:他のものを試しても、列のスネークケースです。また、Modelオブジェクトから呼び出してリレーションシップにアクセスできるメソッドのため、テーブル名とカラム名を重複させないことをお勧めします。

6
Seiji Manoan