当前位置: 首页 > 面试题库 >

Laravel includesToMany关系在两个表上都定义了本地键

丁宏浚
2023-03-14
问题内容

因此,belongsToMany关系是多对多关系,因此需要数据透视表

示例中,我们有一个users表,一个roles表和一个user_roles数据透视表。

枢轴表有两列,user_idfoo_idfoo_id指的是id在角色表。

为此,我们在user雄辩的模型中编写了以下代码:

return $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');

现在,这个寻找一个id在外地users表,并与加入它user_id在该领域user_roles表。

问题是我想指定一个不同的字段,而不是idusers表中加入。例如bar_id,在用户表中我想用作local key与之联接的表user_id

从laravel的文档中,尚不清楚如何执行此操作。在诸如hasManybelongsTo这样的其他关系中,由于某种原因,我们可以在此处指定local keyforiegn key但不能在此处指定。

我希望local key用户表上的bar_id而不是id

我怎样才能做到这一点?


问题答案:

更新:从 Laravel 5.5 开始,可以使用通用关系方法,如下面的@cyberfly所述:

public function categories()
{
    return $this->belongsToMany(
         Category::class,
         'service_categories',
         'service_id',
         'category_id', 
         'uuid',  // new in 5.5
         'uuid'   // new in 5.5
    );
}

供参考,以前的方法:

我认为这id是您User模型的主键,因此无法使用Eloquent方法执行此操作,因为belongsToMany它是$model->getKey()用来获取该键的。

因此,您需要创建自定义的关系扩展来belongsToMany满足您的需求。

您可以尝试快速猜测一下:(未经测试,但肯定无法用于急切的加载中)

// User model
protected function setPrimaryKey($key)
{
  $this->primaryKey = $key;
}

public function roles()
{
  $this->setPrimaryKey('desiredUserColumn');

  $relation = $this->belongsToMany('Role', 'user_roles', 'user_id', 'foo_id');

  $this->setPrimaryKey('id');

  return $relation;
}


 类似资料:
  • 我需要在我的数据库中创建多个多对多的关系。 有一个“主”表,我们称之为“项目”。 然后有3个表包含“选项”。 假设我们有:品类、地域、用户。这些保存的唯一信息是项目的名称和ID。 可以将多个类别、区域和用户分配给多个项目。 因此,我有两个选项来创建这种关系: 1)为每个'选项'表创建关系表。每个表包含两列:project_id和category_id、region_id或user_id。使用这种方

  • 我在我的application.ie有一个参考系统,一个用户可以参考另一个。 用户表 转介表 我想显示用户的推荐。 用户模型 推荐模型 定义在用户模型中有很多关系,在推荐模型中属于关系,我没有得到预期的结果。 这将返回给我用户本身(推荐人)的名称,而不是推荐人的名称

  • 编辑: 我正在使用热切加载,我认为这将影响它的工作方式。

  • 我正在为一位客户建一家商店。现在在产品页面上,有一个下拉列表,您可以选择“标准”或“快递”。 当客户选择此选项时,您可以从本产品中选择所需的金额。 现在我在stackoverflow(Woocommerce get variation product price)上找到了一段代码,可以直接在下拉列表中的金额之后显示正确的价格。这很好用。 但是现在,第一个金额变化(100欧元(22欧元))的价格也显

  • 在Mac OS X上的Eclipse Kepler上有一个简单的Google App Engine Web应用程序项目,其java版本为“1.7.0_45” 遇到以下情况: 当我尝试在localhost上作为web应用程序运行时 任何帮助都是有用的。

  • 我有2个具有1:(0或1)关系的表,例如: 表1-学生 表2-学生地址 并非每个学生都有地址(例如) 我想更新这两个表,更新学生,如果存在相对行student_address-更新也student_address。