【问题标题】:Fetching data from two tables in Laravel in show function in controller?在控制器的显示功能中从 Laravel 的两个表中获取数据?
【发布时间】:2020-10-20 21:59:38
【问题描述】:

我有两个Model,School和Student的关系是,School has Many Student //学生模型

public function school()
    {
        return $this->belongsTo('App\School');
    }

和学校模型一样,下面是关系函数

public function student()
    {
        return $this->hasMany('App\Student');
    }

现在我有一个显示页面,我想显示以下信息。 (school_name,school_code) 来自学校表和学生信息都来自学生表。如果我传递为,则在学生控制器中使用 show 函数

 public function show($id)
        {
            $student=Student::find($id);
            $school=School::find($id);   
     return View::make('student.show')->with(['school'=> $school,'student'=>$student]); 
}

如果 school_id ==$id 但一所学校有很多学生,它会从学校获取数据,如果我单击以显示 ID 为 109 的按钮,它会失败,如何编写联接查询以从学校表中获取 school_code 和 school_name。

【问题讨论】:

  • 你有一个展示页面...展示什么?学校还是学生?
  • 尝试立即加载Student::with('school')->find($id);
  • 我还可以建议将关系重命名为students 而不是student,因为它是一个“多”关系并且会返回一个集合总是(复数)

标签: laravel eloquent laravel-blade laravel-query-builder laravel-controller


【解决方案1】:

不知道您为什么使用相同的$id 来获取学生和学校

public function show($id)
{
    $student = Student::find($id);
    $school = $student->school; //school of the student
    return View::make('student.show')->with(['school'=> $school,'student'=>$student]); 
}

使用此代码

【讨论】:

    【解决方案2】:

    你的模型应该是这样的

    public function students()
    {
        return $this->hasMany('App\Student');
    }
    

    你必须这样改变。

    $student = Student::find($id);
    $school  = $student->school;
    

    【讨论】:

      【解决方案3】:

      由于您已经建立了关系,您可以使用 Eloquent 获取其所属学校的单个学生的数据,如下所示:

      public function show($id)
      {
        $student = Student::with('school')->where('id', $id)->first();
        return View::make('student.show')->compact('student); 
      

      }

      现在您可以检索数据show.blade.php,如下所示:

      @foreach($student as $stud)
        <li> {{ $stud->student_name}}</li>
        <li> {{ $stud->student_code}}</li>
        <li> {{ $stud->->school->school->name}}</li>
        <li> {{ $stud->school->school_name }}</li>
      @ndforeach
      

      【讨论】:

        猜你喜欢
        • 2019-07-20
        • 1970-01-01
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 2018-01-15
        相关资源
        最近更新 更多