我正在创建一个应用程序,其中用户可以分配给多个组织,组织可以有多个用户-多对多关系。我想做这样的事情:$user->organisations()->get()以及$organisation->users()->get()我有一张桌子。。。我有一张桌子。。。休斯敦大学!用户组织,用户组织!我有一个userspivot/mapping/etc.表注意organisations表有一个user_orgs字段和一个user_orgs字段。雄辩的假设和期望org_id-但这不是我命名的表,我也不想重命名。我设置了以下应用程序/组织.phppublic function users(){ return $this->belongsToMany("App\User");}对于用户:App/User.php软件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,CyraseTube用户”不存在(SQL:选择 *, > user_id AS organisation_user,organisations as cc> > cc>内联接上organisation_user .user_id=ccc> .cc>在哪里pivot_user_id,organisation_user=1)我脑子里的两个问题是:第一,我如何指定雄辩,使用organisation_id而不是假设pivot_organisation_id,就像我可以覆盖模型上的organisations或organisation_user一样?二:如何指定foreignKey列,使其使用organisations而不使用id?但请提出其他建议。提前谢谢大家。 最佳答案 通过将数据透视表作为第二个参数传递给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将按字母顺序联接两个相关的模型名。但是,您可以随意重写此约定。您可以通过将第二个参数传递给belongComany方法来完成此操作。关于php - Laravel使用数据透视表的多对多关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57446296/
10-11 22:40