【问题标题】:Laravel8 Has One Of ManyLaravel 8 有许多之一
【发布时间】:2021-08-08 16:31:45
【问题描述】:

我对 Laravel 8 比较陌生,当我需要一段关系时,我不知道该怎么做。 在 Laravel 8 的文档中没有很好的记录。

我的用户只能拥有一份工作。 我有一个表格 Jobs 我列出了所有可用的 Job { id、名称、时间戳 }

我应该在 User 表中创建一个 job_id 来存储 Job 的 id 要么 我应该在 job_user 表中使用多对多

有没有更好的方法来创建“多者合一”关系。

【问题讨论】:

  • 如果我正确理解您的问题,您只需要hasOne() 与其中一张表中的外键建立关系。
  • 在用户表中需要存储job_id并使用hasOne()关系
  • @PalakJadav 如果我在用户表中理解正确,则添加 job_id 并在用户模型中创建 hasone 关系。我能否从用户模型访问作业->名称
  • 是的,你会@MathieuB

标签: laravel relationship laravel-8 relation


【解决方案1】:

你们的关系很简单:

工作有很多用户

用户有一个工作

因此,您应该在 users 表中添加 job_id 并将其链接到 jobs 表。

  public function up()
    {
        Schema::table('users', function (Blueprint $table) {
               $table->unsignedBigInteger('job_id');
               $table->foreign("job_id")->references('id')->on('jobs');
        });
    }
 

并确保在创建用户和作业表之后进行此迁移。

根据 Laravel doc,关系应该是这样设置的:

在用户模型中:

class User extends Authenticatable
{
   public function job()
    {
        return $this->belongsTo('App\Models\Job', "user_id");
    }
}

对于作业模型:

class Job extends Model
{
   public function users()
    {
        return $this->hasMany('App\Models\User', "user_id");
    }
}

【讨论】:

  • 听起来不错,但这也需要数据透视表。
  • 只有多对多关系才需要数据透视表
  • 由于用户只能拥有一个作业,因此没有多对多
  • 在 Job 函数的用户模式中,我使用“hasOne”而不是 belongsTo。对此有任何强硬。 return $this->hasOne(Job::class,'id','job_id');
猜你喜欢
  • 2021-03-01
  • 2023-02-03
  • 2017-10-30
  • 2022-12-04
  • 2014-11-17
  • 2021-07-29
  • 2021-06-24
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多