Проекты и задачи: получать проекты, в которых все задачи активны - PullRequest
1 голос
/ 01 ноября 2019

У меня есть две модели: Project и Task.

Обе имеют отношения друг с другом, установленные в их моделях.

Задачи имеют статус выполнения in_progress (1) или завершены (0).

Используя отношения, я пытаюсь получить только те проекты, в которых есть только задачи, которые выполнены.

Прямо сейчас, с моим кодом, я получаю проекты, у которых есть хотя бы одна задача.

Спасибо за помощь!

public function completedtasks()
    {
        return $this->hasmany(Task::class)->whereStatus_id(1)->whereProgress_id(0);
    }

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Я думаю, что вы должны подходить к этому по-другому:

Создайте метод отношений в вашем проекте:

/**
 * @return HasMany
 */
public function tasks(): HasMany
{
    return $this->hasMany(Task::class);
}

Затем вы можете отфильтровать ваши проекты следующим образом:

$projects = Project::whereHas('tasks', function($query) {
    return $query->where('progress_id', 1);
})->get();
0 голосов
/ 01 ноября 2019

Вы можете получить все проекты, у которых нет задач, с progress_id = 0. Затем вы также можете проверить, что у проекта есть какие-либо задачи с progress_id = 1 (выполнено). [В проекте не должно быть заданий с progess_id = 0 и должно быть хотя бы 1 задание с progress_id = 1]

Project::whereDoesntHave('tasks', function ($query) {
    $query->where('progress_id', 0);
})->whereHas('tasks', function ($query) {
    $query->where('progress_id', 1);
})->get();

Документы Laravel 6.x - Красноречивые отношения - Запрос об отсутствии отношений - whereDoesntHave

Документы Laravel 6.x - Красноречивые отношения - Запрос наличия отношений - whereHas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...