我有三個表:爲什麼Laravel關係的名稱習慣如此奇怪?
- 用戶
- 列:ID,名稱
- 書
- 列:ID,名稱
- book_user:
- 列:USER_ID,book_id,州(
not read yet
,reading
,read already
)
- 列:USER_ID,book_id,州(
我打算用戶book_user
許多一對多關係表,所以我遵循doc命名規範:
要定義這種關係,需要三個數據庫表:用戶,角色和角色用戶。 role_user表來源於相關模型名稱的字母順序,並且包含user_id和role_id列。
我寫代碼:
class User extends Model
{
public function books()
{
return $this->belongsToMany('App\Book');
}
}
,我可以檢索其通過調用user->books()
與用戶的書籍。
行之有效,但是當我試圖找回這關係到用戶的書的狀態,我創建模型:
當我使用這個模型,它宣稱:
Base table or view not found: 1146 Table 'myapp.book_users' doesn't exist
結論:
- 一個表的名稱約定可以使用的因爲多對多是
<singular_noun>_<singular_noun>
(例如book_user
)。 - 具有映射到模型的多個詞的表的名稱約定是
<singular_noun>_<plural_noun>
(例如book_users
)。
我知道我可以手動設置表名該模型映射,但我只是想知道:
這是否衝突是設計缺陷或者只是我在設計表做錯了,楷模?
用戶可以有很多書,所以你的關係應該是從'用戶 - >書籍'更改'hasMany'返回$ this-> belongsToMany('App \ Book');''返回$ this-> hasMany ('App \ Book');'並在'App \ Book'模型上創建reverseAssocation,在這個模型中有$ this-> belongsTo('App \ User')'。 – Samundra