laravel数据透视表返回所有相关数据

时间:2019-09-18 12:00:34

标签: php laravel

实际上很简单的任务,但是我错过了一些事情,请再给我双眼以找出我的错

问题:查询仅返回一行(应返回3)

//App\User.php
    public function languages() {
    return $this->belongsToMany(CustomLanguage::class,'custom_language_user','lang_id','user_id')->withPivot('lang_id','user_id');
}

//App\CustomLanguages.php
    public function users() {
    return $this->belongsToMany(User::class,'custom_language_user','user_id','lang_id')->withPivot('user_id','lang_id');
}

我试图查询用户x的所有语言的内容:

        $user = User::find(Auth::id());
        foreach($user->languages as $l) {
            Log::info($l);
        }


//Returns [2019-09-18 11:38:51] local.INFO: [{"id":1,"lang_de":"Deutsch","lang_en":"German","pivot":{"lang_id":1,"user_id":1}}]

即使在我的数据库中,我也有: user_id:1,1,1 lang_id:1,2,3

所以3行 我有点想念东西,在此先感谢

1 个答案:

答案 0 :(得分:1)

您在关系中传递了错误的参数。

如果您使用的是 User.php 模型,则参数应该为

return $this->belongsToMany(CustomLanguage::class,'custom_language_user','user_id','lang_id')->withPivot('lang_id','user_id');

如果您使用的是 CustomLanguages.php 模型参数,则应该使用。

 return $this->belongsToMany(User::class,'custom_language_user','lang_id','user_id')->withPivot('lang_id','user_id');

所以现在您的模型看起来像

 //App\User.php
    public function languages() {
    return $this->belongsToMany(CustomLanguage::class,'custom_language_user','user_id','lang_id')->withPivot('lang_id','user_id');
}

//App\CustomLanguages.php
    public function users() {
    return $this->belongsToMany(User::class,'custom_language_user','lang_id','user_id')->withPivot('user_id','lang_id');
}