Laravel加入2个表,第一个表中的一个数据和第二个表中的多个行

时间:2017-12-04 07:57:52

标签: php mysql json laravel-5 laravel-query-builder

  

FirstTable

     

id |名字|

           

1 | student1 |

     

2 | student2 |

     

3 | student3 |

     

4 | student4 |

==============================

  

SecondTable

     

Id | stud_id |主题|标记

           

1 | 1 |数学| 50

     

2 | 1 |英语| 45

     

3 | 2 |数学| 20

     

4 | 3 |数学| 40

我如何使用上面的表结构在laravel中查询.. 我需要outpus

{

    "id": 1,

    "name":"student1"

    "marks":[

        {

            "subject":"maths",

            "marks":50,

        },

        {

            "subject":"emglish",

            "marks":45,

        }

    ]

}

3 个答案:

答案 0 :(得分:1)

我在Laravel Query Builder中完成了它。 请参阅下文。

$stud = DB::table('FirstTable')
               ->join('SecondTable','FirstTable.id','=','SecondTable.stud_id')
               ->where('FirstTable.id','=','1')
               ->get();
dd($stud);

答案 1 :(得分:0)

我正在以雄辩的方式做到这一点。在您的学生模型中创建关系方法。这是一个学生可以有很多主题关系

public function subject(){
return $this->hasMany('App\"the second table model name",'stud_id');

}

然后你在控制器中就可以像

一样访问它
public function index(){
$student = Student::find("Student_id")->subject;
dd($student);
}

请阅读文档以便更好地理解 https://laravel.com/docs/5.5/eloquent-relationships

答案 2 :(得分:0)

您可以与这些表创建关系。在这里你需要一对多的关系。

你需要学生,课程表

学生

Schema::create('students', function (Blueprint $table) {
$table->increments('id');
$table->string('student_name')
});

吸取

Schema::create('lessons', function (Blueprint $table) {
$table->increments('id');
$table->integer('student_id');
$table->integer('exam_number'); // there will be many exams right ?
$table->integer('lesson1')
$table->integer('lesson2');
$table->integer('lesson-etc');
$table->timestamps();

$table->foreign('student_id')->references('id')->on('students')
});

然后按以下方式编辑模型

学生模特;

public function lessons(){

       return $this->hasMany('App\Lesson','student_id','id');
    }

并在你的课程模型中;

 public function students(){

      return $this->belongsTo('App\Student');
    }

然后在你的控制器中,

$students = Student::whereHas('lessons', function ($query) {

            $query->where("exam_number", 2 (or which exam));
        })->get();

最后,在你的刀片中;

 <table >
  <tr>
    <th>Student Name</th>
    <th>Lesson 1</th>
    <th>Lesson 2</th>
  </tr>
@foreach($students as $student)
  <tr>
    <td>{{$student->student_name}}</td>
    <td>{{$student->lessons->lesson1}}</td>
    <td>{{$student->lessons->lesson2}}</td>
  </tr>
@endforeach
</table> 

这应该是工作