Я использую ларавель 5.6. У меня два стола. Один — Учителя (идентификатор, имя, адрес электронной почты, зарплата), другой — Ученики(id,teacher_id,имя,электронная почта). Я объединил 2 таблицы.
$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}}
Как я могу отобразить имя sthdent и имя учителя. Есть такое же имя столбца.
заранее спасибо






Вам нужно добавить перед ->get()
->select('Teachers.name as teacherName', 'Students.name as studentName')
и чем вы можете воспользоваться
{{$vu_data[0]->teacherName}}
и
{{$vu_data[0]->studentName}}
У меня слишком много одинаковых столбцов. Я только что показал вам некоторые из них. Как мне это сделать ?
Затем потратьте некоторое время и проигнорируйте «присоединение», сделайте это, используя отношения Eloquent laravel.com/docs/5.7/красноречивые-отношения#многие-ко-многим, чтобы это было $uv_data[0]->students()->name, я ответил здесь на конкретное решение, которое вы просили
Вам нужно будет указать столбцы в предложении 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();
Тем не менее, вы можете захотеть изучить Красноречивые отношения, что позволит вам перебирать учителя, а затем всех учеников этого учителя или наоборот.
Если вы используете выбор, как указано выше, вы должны использовать {{$vu_data[0]->teacher_name}}, чтобы получить значение. В противном случае нет. Он не передает имя таблицы обратно объекту, а объекты не любят повторяющиеся имена свойств.
Сэкономьте время с select(['teachers.*', 'students.*', 'teachers.name as t_name', 'students.name as s_name']). Более поздние выборки переопределяют предыдущие.
Лучше использовать отношения Laravel Eloquent https://laravel.com/docs/5.7/eloquent-relationships#один ко многим*. Наденьте модель вашего Учителя
public function students(){
return $this->hasMany('App\Students', 'teacher_id', 'id');
}
Вы будете звонить так:
$vu_data->students()
Если вы хотите использовать свой выбор, просто используйте «AS»
->select('Teachers.name as teacher_name', 'Students.name as student_name')
Большое спасибо. что должно возвращаться из контроллера типа вернуть представление ('view_full') -> с ('vu_data', $ vu_data); Для меня это ново. пожалуйста, не возражайте
Что вы подразумеваете под «возвратами от контроллера, такими как return view('view_full')->with('vu_data',$vu_data);"? Это довольно ясно, 1. добавить отношения.... 2. Передача данных с контроллера на блейд....3. Потом посмотреть в блэйде. Ничего дополнительно делать не надо
Да, вы просто передадите "->with('vu_data',$vu_data)". В вашем представлении вам понадобится цикл foreach для доступа к каждому ученику индивидуально: foreach($vu_data->students()->get as $ студент) Некоторым людям не нравится вызывать методы moddel для представлений, но это для другого вопроса rsrs
Извини . Я хочу передать данные от контроллера
Другой способ перейти к представлению ->with('vu_data',$vu_data)->with('students', $vu_data->students()->get())
в порядке. пожалуйста, не беспокойте меня. как я могу сравнить как ->где('учителя.id', $id)
Как и вы, но без JOIN Teacher::where('teachers.id', $id)->get(); Красноречивый присоединится к вам.
В приведенном выше предложении вы можете дать мне код контроллера, чтобы я мог передать его для просмотра страницы?
Не понял вопроса. В том, что? $vu_data = Учитель::где('учителя.id', $id)->get(); return view('view_full') ->with('vu_data',$vu_data) ->with('students',$vu_data->students()->get());
Согласно рассматриваемой структуре таблицы, это Not many-to-many. Идентификатор учителя хранится в таблице учеников без отдельной таблицы student_teacher.
В соответствии со структурой вашей таблицы 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
нет, после того, как вы можете указать, что это имя учителя, имя_учителя и т. д., просто не используйте точку, потому что это испортит синтаксис SQL, а также ->teachers.name не разрешено в PHP