【发布时间】:2011-09-13 17:10:13
【问题描述】:
我想通过 Propel 1.6 使用 fluid ModelQuery 接口为我的每个线程(私人消息系统)获取最新条目。这将允许我重用这两种方法来获取最新条目,并且只获取涉及用户的条目(没有人希望看到不属于他的消息)。
我已经发现,在标准 SQL 中,我必须为我的每个论坛线程使用 get the newest entry 的子查询。我还发现在 Propel 中你必须使用 Criteria::CUSTOM 查询来实现这一点,但整个 Criteria::CUSTOM 的东西似乎是 Propel-1.6 之前的,因为没有一个示例使用新的 ModelQuery。
现在的问题是,我想利用 ModelQueries 中的连接功能,您可以像这样将几个自己的方法相互附加:
$entries = MessageQuery::create()
->messagesInvolvingUser($user) // user retrieved or sent the message
->newestFromThread() // get the latest entry from a lot of Re:-stuff
如果我不得不使用,我认为这仍然是可能的
$c = new Criteria();
$c->add([the subquery filter]);
在newestFromThread().
在给定以下方案的情况下,检索每个线程的最新条目的最佳方法是什么(thread_id 表示所有消息属于同一个对应关系,我只希望每个 thread_id 一个条目):
id(INT)
title(VARCHAR)
thread_id(INTEGER)
date(DATETIME)
当前的 PHP 实现如下所示:
<?php
class MessageQuery extends BaseMessageQuery {
public function messagesInvolvingUser($user) {
return $this
->where('Message.AuthorId = ?', $user->getId())
->_or()
->where('Message.RecipientId = ?', $user->getId());
}
public function newestFromThread() {
return $this;
// To be implemented
}
}
我是这样使用它的:
$messages = MessageQuery::create()
->messagesInvolvingUser(Zend_Auth::getInstance()->getIdentity())
->newestFromThread()
->find();
【问题讨论】:
标签: propel