【问题标题】:Laravel Relationship: A division has many ranks, a rank has 1 division, and a user has only 1 rankLaravel关系:一个部门有很多等级,一个等级有1个部门,一个用户只有1个等级
【发布时间】:2020-11-13 21:31:24
【问题描述】:

例如:

部门:

  • A 组
  • 乙组
  • C司
  • 等等……

分区排名

  • 甲组 -- 1 级,2 级,3 级,...
  • 乙组 -- a 级, b 级, c 级, ...
  • 等等..

并且用户只会被分配一个等级。例如,它们将是“排名 1”。

这个场景需要什么样的关系?表格设置应该是什么样子?

【问题讨论】:

    标签: laravel eloquent relationship laravel-7 eloquent-relationship


    【解决方案1】:

    您的division 表将是

    id | name
    

    您的rank 表将是

    id | division_id | name
    

    您的user 表将是

    id | name
    

    您的user_rank 表将是

    id | user_id | rank_id
    

    根据 Laravel 中的关系

    部门型号

    class Division extends Model
    {
        protected $table = 'divisions';
        public function ranks()
        {
            return $this->hasMany('App\Rank','rank_id','id');
        }
    }
    

    排名模型

    class Rank extends Model
    {
        protected $table = 'ranks';
        public function divison()
        {
            return $this->belongsTo('App\Divison','rank_id','id');
        }
        public function users()
        {
            return $this->belongsToMany('App\User',''user_rank','rank_id','user_id');
        }
    }
    

    用户模型

    class User extends Model
    {
        protected $table = 'users';
       
        public function ranks()
        {
            return $this->belongsToMany('App\Rank',''user_rank','user_id','rank_id');
        }
    }
    

    【讨论】:

    • 如果一个排名可以分配给多个用户,是否没有必要改为使用 $this->hasMany(User::class, 'user_id', 'id') 并拥有一个排名( ) 在用户模型中也有功能吗?我仍在使用 Laravel,请原谅我。
    • @Brennan 如果用户只能拥有一个排名,如问题中所示,它应该是 hasOne 而不是 hasMany。但是,是的,您在用户模型中的排名关系是正确的
    • @user3532758 啊,好吧,所以我得到的是这个答案是正确的(至少对我来说这似乎是合乎逻辑的),尽管基本上缺少的是用户模型中的这个函数: public function rank() { return $this->hasOne('App\Rank', 'rank_id', 'id'); }
    • 用户有很多排名那么它将是 belogsToMany 关系请检查我编辑的答案。
    • 我已经根据您的要求编辑了答案,如果用户有很多等级,那么它应该是属于Tomany。如果用户只有一个等级,那么它应该是hasone,belongsTo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2019-09-11
    • 2017-09-10
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多