我正在创建一个应用程序,其中可以将用户分配给多个组织,并且组织可以拥有多个用户 - 多对多关系。我希望能够做这样的事情: $user->organisations()->get()以及$organisation->users()->get()我有一张users桌子...我有一张organisations桌子...我有一个user_orgs枢轴/映射/等。桌子笔记该user_orgs表有一个org_id字段和一个user_id字段。Eloquent 假设并期望organisation_user- 但这不是我为我的表命名的,我也不想重命名。我设置了以下内容应用程序/组织.phppublic function users(){ return $this->belongsToMany("App\User");}和用户:应用程序/用户.phppublic function organisations(){ return $this->belongsToMany("App\Organisation");}然后我测试这个:Route::get('/test-route', function(){ $u = App\User::first(); return $u->organisations()->get();});并得到以下错误:SQLSTATE[42S02]:未找到基表或视图:1146 表 'db.organisation_user' 不存在(SQL:select organisations.*, organisation_user. user_idas pivot_user_id, organisation_user. organisation_idas pivot_organisation_idfrom internal organisationsjoin organisation_useron organisations. id= organisation_user. organisation_idwhere organisation_user. user_id= 1)我心中的两个问题是,一;我如何指定 Eloquent 来使用user_orgs而不是假设organisation_user,就像我可以覆盖模型上的tableName或 一样primaryKey?二:如何指定foreignKey 列,使其使用user_orgs.org_id而不是user_orgs.organisation_id?但请提出替代方案。谢谢大家,提前。
1 回答
Cats萌萌
TA贡献1805条经验 获得超9个赞
您可以通过将其作为第二个参数传递给belongsToMany()关系来设置数据透视表的名称,如下所示:
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/eloquent-relationships#many-to-many
如前所述,为了确定关系连接表的表名,Eloquent 将按字母顺序连接两个相关模型名称。但是,您可以随意覆盖此约定。您可以通过向belongsToMany 方法传递第二个参数来实现。
- 1 回答
- 0 关注
- 154 浏览
添加回答
举报
0/150
提交
取消