Отобразить конкретное имя столбца в laravel 5.6 - PullRequest
0 голосов
/ 21 февраля 2019

Я использую Laravel 5.6.У меня есть два стола.Один - Преподаватели (идентификатор, имя, адрес электронной почты, зарплата) Другой - Студенты (идентификатор, идентификатор учителя, имя, адрес электронной почты) Я присоединился к двум таблицам

$vu_data = Teacher::join('Students', 'teachers.id', '=', 'students.teacher_id')
                           ->where('teachers.id', $id)
                           ->get();
return view('view_full')->with('vu_data',$vu_data);

view_full.blade.php

{{$vu_data[0]->name}}

Как отобразить имя и имя учителя?Там же название колонки.

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 21 февраля 2019

Согласно вашей структуре таблицы one teacher has many students.Следовательно, вместо использования соединения вы можете использовать отношения laravel с hasMany:

У учителя много учеников - Teacher Модель:

public function students(){

   return $this->hasMany(Students::class);

}

Ученик принадлежит учителю - StudentМодель:

public function teacher(){

   return $this->belongsTo(Teacher::class);
}

Теперь вы можете получить отношения, как показано ниже:

Получить всех учителей со своими учениками:

$teachers = Teacher::with('students')->get();

Получить всех учеников конкретного учителя:

$teacher = Teacher::find($teacherId);
$students = $teacher->students;

Наконец, используя это, вы можете преобразовать это:

$vu_data = Teacher::join('Students', 'teachers.id', '=', 'students.teacher_id')
                           ->where('teachers.id', $id)
                           ->get();
return view('view_full')->with('vu_data',$vu_data);

В это:

$teacher = Teacher::find($id);

return view('view_full', compact('teacher'));

Тогда внутри лезвия:

Вы можетеполучить данные учителя: {{ $teacher->name }}

и учеников:

@if($teacher->students->count() > 0)

    @foreach($teacher->students as $student)
      {{ $student->name }} 
    @endforech

@endif
0 голосов
/ 21 февраля 2019

Вам нужно будет указать столбцы в предложении select() в запросе и переименовать столбцы.Например,

Teacher::join('Students', 'teachers.id', '=', 'students.teacher_id')
     ->where('teachers.id', $id)
     ->select('teachers.name AS teacher_name', 'students.name AS student_name', [ rest of columns])
     ->get();

Однако вы можете захотеть изучить Красноречивые отношения , которые позволят вам пройтись по учителю, затем по всем ученикам этого учителя, или наоборот.

0 голосов
/ 21 февраля 2019

Лучший способ - использовать Elaquent отношения laravel https://laravel.com/docs/5.7/eloquent-relationships#one-to-many*. Надень свою модель Учителя

public function students(){

        return $this->hasMany('App\Students', 'teacher_id', 'id');

    }

Ты будешь так называть:

$vu_data->students()

Если хочешьчтобы использовать yur select, просто используйте de 'AS'

->select('Teachers.name as teacher_name', 'Students.name as student_name')
0 голосов
/ 21 февраля 2019

Вам нужно добавить до -> get ()

->select('Teachers.name as teacherName', 'Students.name as studentName')

и чем вы можете использовать

{{$vu_data[0]->teacherName}}

и

{{$vu_data[0]->studentName}}
...