0
我在Laravel項目中有用戶表。有一項任務,每個用戶需要設置他們所說的最少1和最多4種語言。對於每種語言用戶都需要設置熟練程度。那麼如何正確組織呢?組織數據庫結構
我想一些方法:
爲每個語言和水平8個字段,其中一些可能在一個字段留空
存儲一些結構像JSON或一些其他與解析它每次獲取數據時
兩者都看起來像一個柺杖。希望我只是不知道什麼。
我需要一些最佳實踐解決方案。
我在Laravel項目中有用戶表。有一項任務,每個用戶需要設置他們所說的最少1和最多4種語言。對於每種語言用戶都需要設置熟練程度。那麼如何正確組織呢?組織數據庫結構
我想一些方法:
爲每個語言和水平8個字段,其中一些可能在一個字段留空
存儲一些結構像JSON或一些其他與解析它每次獲取數據時
兩者都看起來像一個柺杖。希望我只是不知道什麼。
我需要一些最佳實踐解決方案。
例如,許多用戶可能具有「英語」的語言。爲了定義這種關係,需要三個數據庫表:users
,languages
和language_user
。
language_user
表來源於相關型號名稱的字母順序,並且包含user_id
和language_id
列。
遷移創建language_user
表:
public function up()
{
Schema::table('language_user', function (Blueprint $table) {
$table->increments('id');
//Language foregn key
$table->integer('language_id')->unsigned();
$table->foreign('language_id')->references('id')->on('languages');
//User foregn key
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
});
}
定義的關係:
用戶模型
class User extends Model
{
/**
* The languages that belong to the user.
*/
public function languages()
{
return $this->belongsToMany('App\Language');
}
}
語言模型
class Language extends Model
{
/**
* The users that belong to the language.
*/
public function users()
{
return $this->belongsToMany('App\User');
}
}
現在你有一個更乾淨的用戶/語言表,所有的語言將被存儲在language_user。
Ps。我假設您正在使用名爲languages
的表來存儲語言,如果您不需要,則還需要創建表格和模型。
語言表中的用戶表和語言表外鍵是用戶標識列 – RiggsFolly
用戶表;語言表;以及UserLanguage的外部參考表,其中包含user_id,language_id和proficiency列 –