我在Laravel项目中有用户表。有一项任务,每个用户都需要设置他们说的最少1种语言和最多4种语言。对于每种语言用户都需要设置熟练程度。那么如何正确组织呢?
我想的方法很少:
为每种语言和级别设置8个字段,其中一些可能保持为空
在一个字段中存储一些结构,如JSON或其他一些,并在每次获取数据时解析它
两者看起来像一个拐杖。希望我不知道什么。
我需要一些最佳实践解决方案。
答案 0 :(得分:0)
例如,许多用户可能使用"英语"的语言。要定义此关系,需要三个数据库表: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中。
聚苯乙烯。我假设您使用名为languages
的表来存储语言,如果您不这样做,则还需要创建表格和模型。