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在学生时代经常光顾哪个机构
我的第一个问题是:

如何对这种关系建模?

我不确定,但我认为上述情况是三元relatinoship案,对吗

第二个问题:


如何使用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');
    }

}