Я не уверен в заголовке вопроса, но попытался объяснить ниже. Заранее благодарю всех, кто мне помогает.Вложенный результат при использовании CakePhp Containable
Я попробовал таблицы, чтобы упростить свои вопросы.
DB Таблица
- Новости: news_id, название
- Комментариев: comment_id, news_id, контент, созданное (метка время)
Пользователей публикуют комментарии к новостям. При поиске с вводом «интервала дат 01.10.2015 - 05.11.2015» результат должен включать: новости, которые были прокомментированы между этим интервалом. И comment_count следует показывать рядом с заголовком на экране. Этот comment_count не является целым comment_count, а только счетчиком между этими датами.
Для этого я сначала запросил запрос в комментариях. Затем подсчитайте комментарии. Затем group by news_id.
$Data = $this->Comment->find('all', array(
'fields' => array(
'News.news_id','News.title'
),
'conditions' => array(
"Comment.created >=" => date('Y-m-d', strtotime("-1 days")) //yesterday's commented news
),
'contain' => array(
'News' => array(
'Comment => array(
'fields' => array('COUNT(Comment.id) as comment_count'),
)
)
),
'group' => array('News.title')
));
Результат ниже слишком много вложенности:
Array
(
[0] => Array
(
[News] => Array
(
[id] => 27
[title] => sample news title
[News] => Array
(
[id] => 27
[title] => sample news title
[Comment] => Array
(
[0] => Array
(
[News_id] => 27
[Comment] => Array
(
[0] => Array
(
[Comment_count] => 1
)
)
)
)
)
)
)
)
В заключении, чтобы достичь COMMENT_COUNT, я должен написать вложения вручную. Однако я хотел бы достичь его на одном уровне с первым узлом [title].
$JsonData [] = array(
"id" => $Item["News"]["id"],
"title" => $Item["News"]["title"],
"comment_count" => $Item["News"]["News"]["Comment"][0]["Comment"][0]["comment_count"]
);
Как я могу сократить продолжительность жизни?
Заранее спасибо.
Привет, @skywalker, Спасибо за вашу большую помощь. На самом деле, в моем db, это был идентификатор вместо news_id, но я дал его здесь, чтобы упростить мою проблему. Кажется, моя проблема решена, но все равно без использования соединения. Я бы предпочел использовать существующие модельные отношения Cake. Благодарю. – hrnsarac
Как я уже сказал, вы можете попробовать с counterCache, но таким образом вы не можете получать комментарии за заданный период времени, а всего лишь количество комментариев для данной новости. Я не уверен, что вы можете сделать это, а затем использовать 'join'. – skywalker
В этом результате мне не нужны детали комментариев. Мне нужно только commentCount с заданным интервалом дат. Позвольте мне попробовать counterCache. Благодарю. – hrnsarac