CakePHP, объединяющий рекурсив и группу - PullRequest
1 голос
/ 29 сентября 2011

В моем поисковом запросе у меня установлено рекурсивное значение «два», это замечательно и возвращает все результаты, которые я хочу, но мне нужно сгруппировать по дням результаты, которые находятся на уровнях Teo глубоко в рекурсивном запросе.

Вот что у меня есть: Project->Track->Lapse.Но мне нужно сгруппировать результаты по дням на трассе, как я могу это сделать?

$project = $this->Project->find('all', array(
    'conditions' => array(
                'Project.id' => $id,
                'Project.user_id' => $this->Auth->user('id')
    ),
    'recursive' => 2
    )
);

1 Ответ

2 голосов
/ 29 сентября 2011

ИМХО, ORM Cake, как правило, очень разочаровывает что-либо, кроме тривиальногоВот что я хотел бы сделать, чтобы найти решение:

  1. Прежде всего, включите уровень отладки 2 и посмотрите на запросы, которые генерирует Cake.Это будет зависеть от типов ассоциаций, которые у вас есть.Если он генерирует один запрос для вашего find(), вам повезло!Просто добавьте ключ 'group' в массив параметров поиска, и все готово.

  2. Поскольку Cake, вероятно, генерирует более одного запроса, существует два возможных решения:

    a) Попробуйте Containable .Если вы можете манипулировать его параметрами, чтобы заставить Cake создать отдельный запрос с правильными JOIN s, вы готовы просто добавить параметры 'group' в поиск.Однако я часто расстраивался, пытаясь это сделать, и прибегал к следующему варианту:

    b) Вручную проинформируйте Cake о JOIN s, которые он должен будет использовать, чтобы иметь возможность группировать результаты.Вы можете сделать это, сначала отсоединив все связанные модели (, это может быть полезным), а затем, используя опцию 'joins' для принудительного объединения.Затем вы можете добавить опцию 'group' в поиск.

Я на самом деле довольно часто использую опцию 2b, не только когда мне нужно сгруппировать результаты, но и фильтровать по связанным моделям.

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