php - 如何在 Laravel 5 中建立三元关系

标签 php mysql laravel relational-database

我有三个实体:

  • 用户
  • 简介
  • 状态

总而言之,用户对每个状态都有一个配置文件。

示例

用户表记录

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/

相关文章:

javascript - 可以用 javascript 编写 PHP 逻辑吗?

php - curl_setopt_array 抛出警告信息

php - 如何从二叉树表中获取具有父子关系的数据?

php - cronjob/trigger 可以每天更新数据库

javascript - laravel javascript 单击后为表中的所有按钮获取相同的 id

php - 如何将 EAV 值传递给 Paypal 支付信息

php - 'PDOException' 消息 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ' 214748364 7' for key ' contact_no'

php - 避免mysql关系表中出现重复

javascript - 我怎样才能加快 gulp 速度?

php - 在 Laravel 框架中实现 php 验证码