Задать вопрос

Можно ли получить полноценную orm-структуру моделей через множественный JOIN?

Привет участники!

Возникла задача сделать сортировку по связанным моделям. Покопал интернет и пришел к выводу, что надо делать join.
Написал такую портянку:

$document = Document::select('documents.*', 'c.*', 't.*')
            ->join('document_customs as c', 'documents.id', '=', 'c.document_id')
            ->join('document_templates as t', function($query){
                $query->on('t.document_type_id', '=', 'documents.type_id');
                $query->on('t.field_code', '=', 'c.field_code');
            })
            ->where('documents.id', '=', $document->id)
            ->orderBy('t.field_order', 'DESC')
            ->get();

        dd($document);


В итоге я получил коллекцию объектов типа Document
Collection {#784 ▼
  #items: array:15 [▼
    0 => Document {#785 ▶}
    1 => Document {#786 ▶}
    2 => Document {#787 ▶}
    3 => Document {#788 ▶}
    4 => Document {#789 ▶}
    5 => Document {#790 ▶}
    6 => Document {#791 ▶}
    7 => Document {#792 ▶}
    8 => Document {#793 ▶}
    9 => Document {#794 ▶}
    10 => Document {#795 ▶}
    11 => Document {#796 ▶}
    12 => Document {#797 ▶}
    13 => Document {#798 ▶}
    14 => Document {#799 ▶}
  ]
}

где в объекты типа Document были тупо напиханы все значения из выборки:
#attributes: array:21 [▼
        "id" => 7
        "active" => 1
        "number" => "С140ХТ1501111"
        "name" => "Новый документ1111"
        "start_date" => "2019-11-08 00:00:00"
        "end_date" => "2019-11-30 00:00:00"
        "type_id" => 4
        "status_id" => 1
        "author_id" => 5
        "workflow_id" => null
        "workflow_point_id" => null
        "approval_user_id" => null
        "created_at" => null
        "updated_at" => null
        "deleted_at" => null
        "document_id" => 7
        "field_code" => "radio"
        "field_value" => "{"10": "Десять", "20": "Двадцать", "30": "Тридцать"}"
        "document_type_id" => 4
        "field_order" => 55
        "model" => null
      ]


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

Как тут решить задачу?
  • Вопрос задан
  • 520 просмотров
Подписаться 6 Простой 13 комментариев
Ответ пользователя vism К ответам на вопрос (4)
@vism
Сделайте не
Document::select('documents.*', 'c.*', 't.*')
а
Document::select('documents.*'')
и
->groupBy('documents.id')

другого варианта насколько я знаю нет.
Ответ написан