【问题标题】:Laravel - Having a hasMany() as well as a hasOne() relationship on the same model?Laravel - 在同一模型上有 hasMany() 和 hasOne() 关系?
【发布时间】:2017-05-31 03:03:44
【问题描述】:

我有一个Company 模型,我想在其中定义两个与User 模型的关系:

  public function users(){
     return $this->hasMany('App\User');
  }

  public function administrator(){
     return $this->hasOne('App\User', 'superuserid');
  }

我在数据库的companies 表中有一个superuserid 字段,它是users 表的id 的外键。

我只是想知道这是否是一个好的策略,甚至可能吗?

【问题讨论】:

  • 你的概念很好。
  • 你可以考虑使用superuser_id,你可以考虑使用App\User::class而不是字符串作为第一个参数,除了两个模型之间可以有10个关系。
  • @Kyslik,你为什么建议这样使用第一个参数?
  • 您的 IDE 可能会喜欢它。
  • 我们可以打电话给Company::find(1)->with('users', 'administrator')吗?这个案子可以吗?

标签: php laravel relationship


【解决方案1】:

是的,这是一个很好的策略,而且是可能的。

在您的模型中,您可以根据模型的需要定义尽可能多的关系。并且这些关系可以是不同的类型(hasOne、hasMany、belongsTo 等)。

在你的例子中,由于公司有多个用户并且属于一个超级用户,我们有两个不同的关系,所以很明显,我们需要在模型中创建两个方法来表示这两个关系。

另一个例子:你和你父亲之间的关系。假设有一个 User 模型的实现:

class User extends Model
{

  public function children()
  {
    return $this->hasMany(User::class, 'id_parent');
  }

  public function dad()
  {
    return $this->belongsTo(User::class, 'id_parent')->where('gender', 'male');
  }

}

这里一个用户可以有很多孩子,但只属于一个父亲。

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 2015-09-20
    • 2020-01-18
    • 2019-06-06
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多