Отображать конкретное имя столбца в laravel 5.6

Я использую ларавель 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 и имя учителя. Есть такое же имя столбца.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
1 090
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

и

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

нет, после того, как вы можете указать, что это имя учителя, имя_учителя и т. д., просто не используйте точку, потому что это испортит синтаксис SQL, а также ->teachers.name не разрешено в PHP

Sinisa Bobic 21.02.2019 19:14

У меня слишком много одинаковых столбцов. Я только что показал вам некоторые из них. Как мне это сделать ?

Mujahidur Rahman Mithun IUB 21.02.2019 19:18

Затем потратьте некоторое время и проигнорируйте «присоединение», сделайте это, используя отношения Eloquent laravel.com/docs/5.7/красноречивые-отношения#многие-ко-многим, чтобы это было $uv_data[0]->students()->name, я ответил здесь на конкретное решение, которое вы просили

Sinisa Bobic 21.02.2019 19:20

Вам нужно будет указать столбцы в предложении 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}}, чтобы получить значение. В противном случае нет. Он не передает имя таблицы обратно объекту, а объекты не любят повторяющиеся имена свойств.

aynber 21.02.2019 19:23

Сэкономьте время с select(['teachers.*', 'students.*', 'teachers.name as t_name', 'students.name as s_name']). Более поздние выборки переопределяют предыдущие.

Namoshek 22.02.2019 07:28
Ответ принят как подходящий

Лучше использовать отношения 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); Для меня это ново. пожалуйста, не возражайте

Mujahidur Rahman Mithun IUB 21.02.2019 19:26

Что вы подразумеваете под «возвратами от контроллера, такими как return view('view_full')->with('vu_data',$vu_data);"? Это довольно ясно, 1. добавить отношения.... 2. Передача данных с контроллера на блейд....3. Потом посмотреть в блэйде. Ничего дополнительно делать не надо

Vipertecpro 21.02.2019 19:34

Да, вы просто передадите "->with('vu_data',$vu_data)". В вашем представлении вам понадобится цикл foreach для доступа к каждому ученику индивидуально: foreach($vu_data->students()->get as $ студент) Некоторым людям не нравится вызывать методы moddel для представлений, но это для другого вопроса rsrs

JoaoGRRR 21.02.2019 19:37

Извини . Я хочу передать данные от контроллера

Mujahidur Rahman Mithun IUB 21.02.2019 19:37

Другой способ перейти к представлению ->with('vu_data',$vu_data)->with('students', $vu_data->students()->get())

JoaoGRRR 21.02.2019 19:38

в порядке. пожалуйста, не беспокойте меня. как я могу сравнить как ->где('учителя.id', $id)

Mujahidur Rahman Mithun IUB 21.02.2019 19:41

Как и вы, но без JOIN Teacher::where('teachers.id', $id)->get(); Красноречивый присоединится к вам.

JoaoGRRR 21.02.2019 19:42

В приведенном выше предложении вы можете дать мне код контроллера, чтобы я мог передать его для просмотра страницы?

Mujahidur Rahman Mithun IUB 21.02.2019 19:43

Не понял вопроса. В том, что? $vu_data = Учитель::где('учителя.id', $id)->get(); return view('view_full') ->with('vu_data',$vu_data) ->with('students',$vu_data->students()->get());

JoaoGRRR 21.02.2019 19:48
docs.google.com/document/d/…
Mujahidur Rahman Mithun IUB 21.02.2019 19:57

Согласно рассматриваемой структуре таблицы, это Not many-to-many. Идентификатор учителя хранится в таблице учеников без отдельной таблицы student_teacher.

Mihir Bhende 21.02.2019 20:13

В соответствии со структурой вашей таблицы 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

Другие вопросы по теме