Группировать по отношениям и сортировать по полю отношений - PullRequest
0 голосов
/ 30 октября 2019

У меня есть несколько моделей, которые мне нужно перечислить в определенном порядке. У меня есть много Task, которые принадлежат Project: у Project может быть много Task, а несколько Task могут принадлежать многим Project.

В моем TaskController@index Iхочу перечислить все Task, сгруппированные по Project.id и Project.updated_at. Пример:

Project 1
- Task 1
- Task 2
- Task 3

Project 2
- Task 1
- Task 2
- Task 3

Как решить эту проблему самым простым способом в TaskController?

1 Ответ

1 голос
/ 30 октября 2019

Ключом к вашей проблеме является расширение отношений с помощью функции запроса : $this->hasMany('Task')->orderBy('updated_at');

Пример:

Ваш Project.php Модель:

<?php

class Project
{
    public function tasks()
    {
        return $this->hasMany('Task')->orderBy('updated_at');
    }
}

Ваш TaskController.php контроллер:

<?php

class TaskController
{
    public function index()
    {
        $projects = Project::with('tasks')->orderBy('updated_at')->get();

        // Then use $projects in the blade template
        return view('my-projects', compact('projects'));
    }
}

Ваш projects.blade.php файл блейда:

@foreach($projects as $project)

<p>{{$project->name}}</p>

<ul>
    @foreach($project->tasks as $task)
    <li>{{$task->name}}</li>
    @endforeach
</ul>

@endforeach
...