#laravel #laravel-5 #eloquent
Вопрос:
Я использую join в построителе запросов, и вот результат
[
{
"id": 7,
"name": "class 1",
"idSubject": 17,
"nameSubject": "Math"
},
{
"id": 7,
"name": "class 1",
"idSubject": 16,
"nameSubject": "history"
},
{
"id": 8,
"name": "class 2",
"idSubject": 15,
"nameSubject": "Computer"
},
{
"id": 8,
"name": "class 2",
"idSubject": 19,
"nameSubject": "geography"
}
]
Вы можете видеть, что идентификатор и название класса 1, 2 появляются дважды. Итак, как сделать так, чтобы это появилось один раз.
это мой вопрос:
$data = DB::table('class')->join('class_subject','class.id','=','class_subject.class_id')
->join('subject','class_subject.subject_id','=','subject.id')
->select('class.id','class.name','subject.id as idSubject','subject.name as nameSubject') ->get();
Я хочу этого:
[
{
"id": 7,
"name": "class 1",
"subject": [{"idSubject":"17","nameSubject: "Math"},
{"idSubject":"16","nameSubject: "history"}]
}
]
Комментарии:
1. $data = DB::таблица(‘класс’)->присоединиться(‘class_subject’,’class.id’,’=’,’class_subject.class_id’) ->>присоединиться(‘субъект’,’class_subject.subject_id’,’=’,’subject.id’) ->>>выберите(‘class.id’,’class.name’,’subject.id как idSubject’,’subject.name как объект имен’) ->>>>get();
Ответ №1:
Этот distinct
метод позволяет заставить запрос возвращать различные результаты:
Попробуйте это
$data = DB::table('class')->join('class_subject','class.id','=','class_subject.class_id')
->join('subject','class_subject.subject_id','=','subject.id')
->select('class.id','class.name','subject.id as idSubject','subject.name as nameSubject')->distinct()->get();