Php 如何在Laravel 5中建立三元关系
我有三个实体:Php 如何在Laravel 5中建立三元关系,php,mysql,laravel,relational-database,Php,Mysql,Laravel,Relational Database,我有三个实体: 使用者 侧面图 地位 总之,用户具有每个状态的配置文件 示例 用户表记录 user id | name 1 user1 2 user2 3 user3 状态表记录(此记录先前已设定种子) 纵断面表结构 PROFILE user_status_id (PK) (FK) institution (string) year (timestamp) user1已注册为学生,并根据此状态填写您的个人资料。之后,他将您的状态
- 使用者
- 侧面图
- 地位
user
id | name
1 user1
2 user2
3 user3
状态表记录(此记录先前已设定种子)
纵断面表结构
PROFILE
user_status_id (PK) (FK)
institution (string)
year (timestamp)
user1已注册为学生,并根据此状态填写您的个人资料。之后,他将您的状态更改为collaborator,并填写与此新状态相关的另一个配置文件
有了这些,我想知道:
- user1是什么时候的学生李>
- 用户1已经是合作者了吗
- user1在学生时代经常光顾哪个机构
如何使用Laravel建立雄辩的关系?让我们从关系开始
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、状态、描述
机构
身份证、姓名、地址
用户状态机构
用户id、状态id、机构id、时间戳
这种结构允许我们拥有机构详细信息,即使该机构没有用户配置文件。以前的结构只有当且仅当存在用户配置文件时,才能有机构(仅名称)详细信息。您还可以在一个地方更改机构(姓名/地址/电话等),它将为所有用户更新
尽可能使信息独立,因为这反映在模型、对象和关系中
希望它有意义。我可以看到您当前的表结构不是空闲的,它可能暂时可以工作,但随着您的应用程序或关系的发展,您可能会面临许多挑战,您是否能够更改数据库结构,还是它超出了您的控制范围?如果我想知道“哪个机构的用户1在学生时代经常光顾”?我能够更改数据库结构OK,在这种情况下,明天我将建议更好的数据库结构,以支持配置文件和状态,并举例说明。。
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');
}
}