cakephp如何按计数字段排序?
我尝试了以下方法,但未能将其排序cakephp如何按计数字段排序?,php,sql,cakephp,orm,sql-order-by,Php,Sql,Cakephp,Orm,Sql Order By,我尝试了以下方法,但未能将其排序 $options = array( 'limit' => $limit, 'offset' => $this->Account->get_offset($page, $limit), 'fields' => array(
$options = array(
'limit' => $limit,
'offset' => $this->Account->get_offset($page, $limit),
'fields' => array(
'Accounts.login',
'Accounts.name',
'Accounts.created',
'COUNT(DISTINCT(Buyer.id)) AS "Accounts__buyer_count"',
'COUNT(DISTINCT(Seller.id)) AS "Accounts__seller_count"',
'COUNT(DISTINCT(Certificate.id)) AS "Accounts__certificate_count"'
),
'joins' => array(
array(
'table' => 'buyers',
'alias' => 'Buyer',
'type' => 'LEFT',
'conditions' => array('Buyer.account_id = Accounts.id')
),
array(
'table' => 'sellers',
'alias' => 'Seller',
'type' => 'LEFT',
'conditions' => array('Seller.buyer_id = Buyer.id')
),
array(
'table' => 'certificates',
'alias' => 'Certificate',
'type' => 'LEFT',
'conditions' => array('Certificate.buyer_id = Buyer.id')
)
),
'group' => array('Accounts.id'),
'order' => array('Accounts__certificate_count' => 'ASC')
);
应该转到模型并添加
var $virtualFields = array(
'buyer_count' => 'COUNT(DISTINCT(Buyer.id))',
'seller_count' => 'COUNT(DISTINCT(Seller.id))',
'certificate_count' => 'COUNT(DISTINCT(Certificate.id))',
);
之后,您可以对表中相同的其他字段进行排序使用文档中的虚拟字段(),然后您也可以轻松地对它们进行排序。这只是一个报告,因此不会经常使用它。如果我添加virtualfields,那么我不知道我的模型关系将如何发挥作用。我认为virtualfields很好,但如果它们依赖于其他模型,则实际上没有任何好处。我认为您不了解虚拟字段,它们也可以在实际保存调用之前按需添加。这将使他们暂时依附,因此不会弄乱任何事情。无论何时使用非表字段,虚拟字段都是最佳选择。结果会和你的差不多,但“更甜”。哦,好的。刚刚试运行,效果很好!!!非常感谢。