我有三个实体:
- 用户
- 简介
- 状态
总而言之,用户对每个状态都有一个配置文件。
示例
用户表记录
user
id | name
1 user1
2 user2
3 user3
状态表记录(这个记录是之前播种的)
status
id (PK) | title (string)
1 student
2 collaborator
3 teacher
剖面表结构
PROFILE
user_status_id (PK) (FK)
institution (string)
year (timestamp)
user1 注册为学生 并根据此状态填写您的个人资料。之后,他将您的状态更改为 collaborator 并根据此新状态填写另一份个人资料。
有了这个,我想知道:
- 什么时候 user1 是学生?
- user1 曾经是合作者?
- 用户 1 在学生 期间经常光顾哪个机构?
我的第一个问题是:
如何为这种关系建模?
我不确定,但认为上述情况是三元关系的情况,对吗?
第二个问题:
如何使用 Laravel Eloquent Relationships 进行构建?
最佳答案
让我们从关系开始
class User extends Eloquent{
protected $table = 'user';
public $timestamps = true;
use SoftDeletingTrait;
public function status(){
return $this->hasOne(Status::class, 'user_id', 'id');
}
public function profile(){
return $this->hasMany(Profile::class,'user_id','id');
}
}
class Status extends Eloquent{
protected $table = 'status';
public $timestamps = true;
use SoftDeletingTrait;
public function user(){
return $this->belongsTo(User::class,'user_id','id');
}
}
class Profile extends Eloquent{
protected $table = 'profile';
public $timestamps = true;
use SoftDeletingTrait;
public function user(){
return $this->belongsTo(User::class,'user_id','id');
}
}
上面的关系会以某种方式为您提供所需的东西,但是仅仅写这个关系就让我质疑您的表结构。
建议数据库更改以获得更好的关系
用户 id, 用户名, 邮箱, .......
状态 id, status, description, .......
机构 身份证、姓名、地址………………
User_Status_Institution user_id,status_id,institution_id,timestamp,......
即使该机构没有 user_profile,该结构也允许我们获得机构详细信息。当且仅当存在用户配置文件时,您拥有的先前结构才能包含机构(仅名称)详细信息。您也可以在一个地方更改机构(姓名/地址/电话等),它会为所有用户更新。
尽可能多地尝试使信息独立,因为这反射(reflect)在模型、对象和关系中。
希望它有意义。
关于php - 如何在 Laravel 5 中建立三元关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32644651/