2014-09-19 73 views
23

我使用laravel雄辯的數據對象來訪問我的數據,什麼是最好的方式來命名我的表,列,外國/主鍵等?Laravel - 數據庫,表和列命名約定?

我發現,這裏有很多命名約定。我只是想知道哪一個最適合laravel雄辯的模型。

我想下面的命名約定:

  1. 奇異表名(例如:郵政)
  2. 奇異列名(例如:用戶id - 在後表用戶ID)
  3. 駱駝外殼在表名的多個詞(例如:PostComment,PostReview,PostPhoto)
  4. 駱駝套管在列名的多個詞(例如:名字,postCategoryId,postPhotoId)

因此,我可以在控制器中使用類似的語法。

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

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

如果有人有更好的建議,我會很樂意聽到他們。謝謝!

+1

您可以根據需要使用它們。但問題將是你有正確的定義他們自動使用的情況下的關係。 – 2014-09-19 06:38:20

回答

26

Laravel擁有自己的命名約定。例如,如果您的型號名稱爲User.php,則Laravel預計類「用戶」在該文件中。它也預計usersUser模型。但是,你可以通過你的模型像定義表屬性覆蓋此約定,

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

從Laravel官方文檔:

請注意,我們沒有告訴雄辯該表來使用我們的用戶模型。 除非明確指定了其他名稱,否則該類的小寫複數名稱將用作表名 。因此,在這種情況下,雄辯 將假定用戶模型將記錄存儲在用戶表中。您可以通過在模型定義$table屬性指定 定製表

如果要使用用戶表ID在另一個表的外鍵的話,它應該是蛇的情況下一樣user_id,以便它可以是在關係情況下自動使用。同樣,您可以通過在關係函數中指定其他參數來覆蓋此約定。例如,

​​

Docs for Laravel eloquent relationship

對於表等欄目,你可以爲你喜歡的名字。

我建議你一次通過文檔。

+0

你的'hasMany'示例是錯誤的 - 密鑰應該被替換(fk作爲第二參數,pk作爲第三)。 – 2014-09-19 08:42:24

+0

@Jarek Tkaczk對不起。我編輯了我的答案 – user4055288 2014-09-19 10:14:25

+0

表名「city」呢?它應該是城市還是城市?明確我猜。 – Bsienn 2017-02-01 12:38:46

5

我不同意這些例子,你們都已經在這裏展示了。

如果你看看官方的Laravel文檔,尤其是在Eloquent的關係會議(http://laravel.com/docs/4.2/eloquent#relationships)中,這很乾淨。

表名應該是複數形式,即用戶模型的'用戶'表。

列名不需要在駱駝案例中,而是在Snake案例中。看到它已經被回答了:Database/model field-name convention in Laravel?

這太平常了,你可以看到它就像是RedBeanORM:即使你嘗試使用另一個列的Snake案例。由於可以從Model對象調用以訪問它們的關係的方法,因此建議避免重複使用列名稱。

-1

默認的表名命名約定很容易與安裝可能附帶相同類名的多個包相沖突。解決辦法是將表格命名爲:[vendor]。[package]。[class],這與Laravel中的命名空間應用方式一致。

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

+0

「名稱表爲:..」?爲什麼要這麼做? – m02ph3u5 2017-05-14 12:50:16