当前位置: 首页 > 知识库问答 >
问题:

使用透视表的Laravel多对多关系

钱黎明
2023-03-14

我正在创建一个应用程序,其中用户可以被分配到多个组织,组织可以有多个用户--多对多的关系。

我希望能够这样做:$user->organizations()->get()以及$organizations->users()->get()

  • 我有用户表...
  • 我有组织表...
  • 呃!用户-组织,组织-用户!
  • 和我有user_orgs数据透视/映射/等。表

user_orgs表有一个org_id字段和一个user_id字段。

Elecoquent假设并期望organization_user-但这不是我为表命名的,也不想重命名。

我设置了以下内容

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

用户:

public function organisations(){
    return $this->belongsToMany("App\Organisation");
}

然后我测试一下:

Route::get('/test-route', function(){
    $u = App\User::first();
    return $u->organisations()->get();
});

并得到以下错误:

SQLState[42S02]:找不到基表或视图:1146表“db.organization_user”不存在(sql:选择organizations,organization_useruser_id作为pivot_user_id,organization_userorganization_id作为organizationsorganizations内部加入

我脑子里的两个问题是,一个;如何使用user_orgs,而不是假设organization_user,就像我可以重写模型上的tableNameprimarykey一样?第二:如何指定foreignKey列,使其使用user_orgs.org_id而不是user_orgsorganization_id

但请提出替代方案。

谢谢大家,提前。


共有1个答案

司徒正信
2023-03-14

您可以通过将透视表作为第二个参数传递给bongstomany()关系来设置透视表的名称,如下所示:

public function users(){
    return $this->belongsToMany("App\User", "user_orgs");
}

public function organisations(){
    return $this->belongsToMany("App\Organisation", "user_orgs");
}

文档:https://laravel.com/docs/5.8/Elecoquent-Relationships#多对多

如前所述,为了确定关系的连接表的表名,Eloquent将按字母顺序连接两个相关的模型名。但是,您可以自由地覆盖此约定。可以通过向belomstomany方法传递第二个参数来实现。

 类似资料:
  • 如果我尝试以下操作,则页面正在加载: 有以下表格:-用户-user_department-部门 数据透视表用户\u部门有两个外键:-部门\u id-用户\u id 在我的用户模型中: 在我的部门模型中: 顺便说一下:以下代码正在工作: 但是我无法在不破坏我的页面的情况下获得用户的部门。 有什么想法吗?

  • 用户表结构:用户 id、名称、用户名、密码、创建时间、更新时间 文章表结构:文章 id、标题、内容、创建时间、更新时间 关系表:文章\用户 id、文章id、用户id处于活动状态、创建时间、更新时间 标签 id、名称、用户id、创建时间、更新时间 透视表项目用户与标记的关系。表:文章\用户\标签 标签号,物品号,用户号 我想连接这些表,以便可以像这样或类似的格式访问 并且应该能够创建/更新smth,

  • 我对定义关系和框架都是新手,我只是习惯了原始SQL。我做了家庭作业(google Laravel文档),但我想我只是没有正确理解它。 以下是相关信息:用户表: 挑战表: 用户挑战链接 Challenge_sub_categories 所以我的目标...用户- 这些关系: 一个用户有很多User_challenge_links User_challenge_link有challenge_sub_ca

  • 问题内容: 我是一起定义关系和框架的新手,我只是习惯于原始SQL。我做了家庭作业(google + Laravel文档),但是我认为我不太了解它。 以下是相关信息:用户表: 挑战表: User_challenge_links Challenge_sub_categories 所以我的目标..用户->挑战。 关系: 一个用户有许多User_challenge_links 一个User_challen

  • 我试图创建一个关系,通过一个名为年级的模型访问一个名为注释的表,通过年级中的学生加载 年级模型和学生模型都属于其他模型 根据我的理解,不可能访问需要透视表的hasManyThrough关系(注释没有年级标识符,只有学生标识符) 我为Laravel 4@HasManyThrough找到了这些函数,它们具有一对多关系,但它给了我一个错误类“App\illumb\Database\Eloquent\Re

  • 您好,当我更新或删除API中的数据时,我需要有关laravel 8多对多关系透视表的帮助。这些是我的文件信息。首先,我创建了两个表:Companies(迁移文件) 联系人(迁移文件) 在此之后,创建透视表company\u contact(迁移文件) 模型如下所示:公司模型 } 联系人模型 } 我的路线文件 我的公司控制人 } 公司存储请求 公司资源 也许有人可以帮助我在公司控制器中编写正确的st