开发者

CakePHP philosophical question

So i have a lot of different model types. Comments, posts, reviews, etc. And I want to join them into one integrated feed. Is there a CakePHP style of merging all this data for display, ordered by timestamp?

There are a lot of messy ways to do this but I wonder if there is some standard way which I am missin开发者_JAVA百科g. Thanks!


Since the items are from different tables, it's difficult to retrieve them sorted together from the database in any case. Depending on how well organized your data is though, something as non-messy as this should do:

$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']);
});


philosophical? lol

No, I don't think there is one. Although you could write an afterSave() in app_model. Check for the data you're looking for, and if found, put it in Cache. It will probably be messy, but at least it's in one place, and doesn't affect the performance much.


There's definitely no way to merge the data automatically, but instead of firing separate queries for each relationship, you can grab it all at once using CakePHP's Containable behavior.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜