2017-04-06 224 views
0

我在Laravel項目中有用戶表。有一項任務,每個用戶需要設置他們所說的最少1和最多4種語言。對於每種語言用戶都需要設置熟練程度。那麼如何正確組織呢?組織數據庫結構

我想一些方法:

  • 爲每個語言和水平8個字段,其中一些可能在一個字段留空

  • 存儲一些結構像JSON或一些其他與解析它每次獲取數據時

兩者都看起來像一個柺杖。希望我只是不知道什麼。

我需要一些最佳實踐解決方案。

+0

語言表中的用戶表和語言表外鍵是用戶標識列 – RiggsFolly

+2

用戶表;語言表;以及UserLanguage的外部參考表,其中包含user_id,language_id和proficiency列 –

回答

0

使用Many to Many relationship

例如,許多用戶可能具有「英語」的語言。爲了定義這種關係,需要三個數據庫表:users,languageslanguage_user

language_user表來源於相關型號名稱的字母順序,並且包含user_idlanguage_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的表來存儲語言,如果您不需要,則還需要創建表格和模型。