Laravel Join 2 таблицы, одни данные из первой таблицы и несколько строк из второй таблицы

Первая таблица

идентификатор | имя |


1 | студент1 |

2 | студент2 |

3 | студент3 |

4 | студент4 |

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

Вторая таблица

Идентификатор | stud_id | предмет | отметка


1 | 1 | математика | 50

2 | 1 | английский | 45

3 | 2 | математика | 20

4 | 3 | математика | 40

Как мне сделать запрос в laravel с приведенной выше структурой таблицы. Мне нужен вывод как

{

    "id": 1,

    "name":"student1"

    "marks":[

        {

            "subject":"maths",

            "marks":50,

        },

        {

            "subject":"emglish",

            "marks":45,

        }

    ]

}

person Mohd Riaz    schedule 04.12.2017    source источник
comment
Вы хотите запросить, используя конструктор запросов laravel или красноречивый ORM laravel?   -  person Swapnil Yeole    schedule 04.12.2017
comment
все нормально :)   -  person Mohd Riaz    schedule 04.12.2017


Ответы (3)


Я сделал это в Laravel Query Builder. Пожалуйста, смотрите ниже.

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

Я делаю это красноречиво. В вашей модели Student создайте метод отношений. Это студент может иметь много предметных отношений

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);
}

пожалуйста, прочтите документацию для лучшего понимания

person Arun jai    schedule 04.12.2017

Вы можете создать отношения с этими таблицами. Здесь вам нужны отношения один ко многим.

Вам нужны ученики, уроки, столы

Ученики

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> 

Это должно быть работа

person Community    schedule 04.12.2017