【发布时间】:2019-08-19 09:25:59
【问题描述】:
我确定我以前做过类似的事情,但找不到它,谷歌也没有帮助。
如果可能,使用 Phalcon 模型,我想从 ID 出现最多的表中选择项目 - 即按受欢迎程度排序的 10 个最受欢迎的项目。这可以使用Model::find("conditions") 吗?我必须为此使用 PHQL 吗?
【问题讨论】:
标签: phalcon phalcon-orm
我确定我以前做过类似的事情,但找不到它,谷歌也没有帮助。
如果可能,使用 Phalcon 模型,我想从 ID 出现最多的表中选择项目 - 即按受欢迎程度排序的 10 个最受欢迎的项目。这可以使用Model::find("conditions") 吗?我必须为此使用 PHQL 吗?
【问题讨论】:
标签: phalcon phalcon-orm
使用模型::查找
Model::find([
'columns' => 'id,count(id) as counter',
'group' => 'id',
'order' => 'counter DESC'
]);
PHQL:
$this->modelsManager->executeQuery('SELECT count(id) AS counter,id FROM ModelName GROUP BY id ORDER BY counter DESC');
【讨论】:
Model::find() 的简单方法。
find() 确实有一个 group 子句,但我认为不可能做你想做的事,因为你还需要计数。
Talal 的答案很接近,但如果你想要一个模型对象列表,它将不起作用。
这样的事情应该可以工作:
$Results = $this->modelsManager->executeQuery('SELECT * FROM ModelName GROUP BY id ORDER BY count(id) DESC LIMIT 10');
$Results->setHydrationMode(\Phalcon\Mvc\Model\Resultset::HYDRATE_RECORDS);
可能不需要设置水合模式,因为 Phalcon 可能会根据查询要求 * 的事实默认使用该模式。
【讨论】: