CakePHP философский вопрос - PullRequest
       1

CakePHP философский вопрос

0 голосов
/ 09 августа 2011

Так что у меня много разных типов моделей.Комментарии, посты, отзывы и т. Д. И я хочу объединить их в один интегрированный канал.Есть ли в CakePHP стиль слияния всех этих данных для отображения, упорядоченный по метке времени?

Есть много грязных способов сделать это, но мне интересно, есть ли какой-то стандартный способ, который мне не хватает.Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 августа 2011

Так как элементы находятся в разных таблицах, в любом случае трудно извлечь их, отсортированные вместе из базы данных.В зависимости от того, насколько хорошо организованы ваши данные, может быть что-то более беспорядочное:

$posts = $this->Post->find(...);
$reviews = $this->Review->find(...);
$comments = $this->Comment->find(...);

$feed = array_merge($posts, $reviews, $comments);
usort($feed, function ($a, $b) {
    $a = current($a);
    $b = current($b);
    return $strtotime($a['created']) - strtotime($b['created']);
});
0 голосов
/ 09 августа 2011

Определенно нет способа автоматически объединить данные, но вместо того, чтобы запускать отдельные запросы для каждого отношения, вы можете получить их все сразу, используя поведение CakePHP Containable .

0 голосов
/ 09 августа 2011

философско?LOL

Нет, я не думаю, что есть один.Хотя вы можете написать afterSave () в app_model.Проверьте данные, которые вы ищете, и, если они найдены, поместите их в Cache.Это, вероятно, будет грязно, но, по крайней мере, в одном месте и не сильно повлияет на производительность.

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