Как получить данные с помощью построителя запросов в laravel

#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();