У меня есть три таблицы:Как разделить Eloquent отношений результат по атрибуту и принимать только подсчитывать
Table : projects
id, name
Table : services
id, project_id, name
Table : tasks
id, service_id, name, completed
- Каждый проект имеет множество услуг
- Каждая служба имеет множество задач
Мой Eloquent Модели имеют следующие отношения, как указано выше:
class Project {
public function services() {
$this->hasMany('App\Service', 'project_id');
}
class Service {
public function project() {
$this->belongsTo('App\Project', 'project_id');
}
public function tasks() {
$this->hasMany('App\Task', 'service_id');
}
class Task() {
public function service() {
$this->belongsTo('App\Service', 'service_id');
}
}
Служба имеет множество задач. Если все задачи службы «завершены» = истинно, Служба завершена
Теперь я хочу запросить проекты LAST 5 с ЗАВЕРШЕННЫМИ УСЛУГАМИ и НЕ ЗАВЕРШЕНЫ УСЛУГИ.
Например:
- Service 1 и обслуживание 2 принадлежат к проекту 1
- Задача 1 (завершено) и Task 2 (завершено) принадлежат Service 1
- Задача 3 (завершено) и задачи 4 (не заполнено) принадлежат Сервису 2
В этом случае проект 1 имеет 2 службы: сервис 1 (завершен, поскольку все его задачи завершены) и сервис 2 (не завершен, поскольку одна задача по-прежнему не выполнена компл eted).
Таким образом, результатом будет: project1 (все его данные) со счетом (services_completed) (будет 1) и со счетом (services_uncompleted) (тоже будет 1).
Я хочу запросить последние проекты x. Как я могу сделать запрос на все эти данные один раз, избегая запросов во время цикла foreach для сканирования массива проектов?
Я не знаком с Laravel - SQL достаточно для ответа? – Bohemian
Спасибо за ответ. Я могу фактически выполнить запрос в SQL. Меня интересует решение с Eloquent Models и его отношениями – Release