【问题标题】:Error in join result from two tables in Laravel Eloquent?Laravel Eloquent 中两个表的连接结果错误?
【发布时间】:2021-03-07 11:27:18
【问题描述】:

我目前正在尝试在多个表之间建立关系。

教育机构

id  institution_name  country  city    
1    ABC College       UK      London

用户教育

id  user_id  institution_id  grade   year  
1    1         1              3.2    2010

关系是

class UserEducation extends Model {

  public function educationInstitution()
    {
       return $this->hasMany(EducationInstitution::class,'institution_id');
    }
}

class EducationInstitution extends Model{

   public function userEducation()
    {
        return $this->hasMany(UserEducation::class);
    }
}

最后在控制器中:

class UserEducationController extends Controller
{
    public function getUserEducation()
    {
        $userEducation = UserEducation::with('education_institutions')
            ->where('user_id',auth()->user()->id)
            ->orderBy('created_at', 'desc')
            ->get();


        return response()->json([
            'userEducation' => $userEducation
        ]);
    }
}

它给出以下错误:

调用模型 [App\Models\UserEducation] 上的未定义关系 [education_institutions]。

我期待这样的回应:

{
  "userEducation": [
    {
      "id": 1,
      "user_id": 1,
      "institution_id": 1,
      "grade": "3.49",
      "institution_name": "ABC College"
      "country":"UK",
      "city":"London"
    }
}

如何解决?

【问题讨论】:

  • 试着给你的关系起一个名字 $this->hasMany(EducationInstitution::class,'institution_id')->as("education_institutions");
  • 如果您将您的关系方法命名为educationInstitution,为什么要在中间加上下划线来调用它。这样做::with('educationInstitution')
  • 我认为你的关系在 UserEducation 模型上是错误的
  • 请告诉我这些表之间的关系逻辑。我想我可以帮助你..

标签: laravel eloquent laravel-7


【解决方案1】:

嗯,正如@Eahiya 所说,我的关系出现了一点错误。此外,我按照@Sumit 的建议更正了::with('educationInstitution')。

我当前的代码是:

class UserEducation extends Model {

  public function educationInstitution()
    {
       return $this->belogsTo(EducationInstitution::class,'institution_id');
    }
}

class EducationInstitution extends Model{

   public function userEducation()
    {
        return $this->hasMany(UserEducation::class);
    }
}

和控制器:

public function getUserEducation()
    {
        $userEducation = UserEducation::with('educationInstitution')
            ->where('user_id',auth()->user()->id)
            ->orderBy('created_at', 'desc')
            ->get();


        return response()->json([
            'userEducation' => $userEducation
        ]);
    }

现在一切正常。

【讨论】:

    猜你喜欢
    • 2019-06-28
    • 2016-09-08
    • 2016-07-22
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多