簡體   English   中英

Laravel - 數據庫、表和列命名約定?

[英]Laravel - Database, Table and Column Naming Conventions?

我正在使用 laravel eloquent 數據對象來訪問我的數據,命名表、列、外鍵/主鍵等的最佳方法是什么?

我發現,那里有很多命名約定。 我只是想知道哪一種最適合 laravel eloquent 模型。

我正在考慮以下命名約定:

  1. 單一表名(例如:Post)
  2. 單列名稱(例如:userId - post 表中的用戶 ID)
  3. 表名中多個單詞的駝峰式大小寫(例如:PostComment、PostReview、PostPhoto)
  4. 列名中多個單詞的駝峰式大小寫(例如:firstName、postCategoryId、postPhotoId)

所以有了這個,我可以在控制器中使用類似的語法。

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

是否有任何推薦的 Laravel 指南? 我可以繼續使用這些命名約定嗎?

如果有人有更好的建議,我會很高興聽到他們的。非常感謝!

Laravel 有它自己的命名約定。 例如,如果您的模型名稱是User.php那么 Laravel 期望類 'User' 位於該文件中。 該公司還預計usersUser模型。 但是,您可以通過在模型上定義表屬性來覆蓋此約定,例如,

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

來自 Laravel 官方文檔:

請注意,我們沒有告訴 Eloquent 將哪個表用於我們的 User 模型。 除非明確指定另一個名稱,否則類的小寫復數名稱將用作表名。 因此,在這種情況下,Eloquent 將假設 User 模型將記錄存儲在 users 表中。 您可以通過在模型上定義$table屬性來指定自定義表

如果您將在另一個表中使用 user 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 雄辯關系文檔

對於表中的其他列,您可以隨意命名它們。

我建議您查看一次文檔。

我總體上不同意你們倆在這里展示的這些例子。

如果您查看 Laravel 的官方文檔,就會很清楚,尤其是在 Eloquent 的關系會話中 ( http://laravel.com/docs/4.2/eloquent#relationships )。

表名應該是復數,即用戶模型的'users'表。

並且列名不需要在 Camel Case 中,但需要在 Snake Case 中。 看到已經回答了: Laravel 中的數據庫/模型字段名稱約定?

太常見了,您可以看到它就像 RedBeanORM:列的 Snake Case,即使您嘗試其他列也是如此。 由於可以從 Model 對象調用以訪問它們的關系,因此建議避免將表名與列名重復。

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

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

默認的表命名約定很容易與多個包的安裝發生沖突,這些包可能偶然具有相同的類名。 一種解決方案是將表命名為:[vendor].[package].[class],這與 Laravel 中命名空間的應用方式一致。

編輯:雖然不建議在表名中使用點。 是否有替代約定可用於確保模塊化構建應用程序的開發人員無需擔心現有表名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM