我有一个让我发疯的问题,我不得不承认我在 CakePHP 方面没有那么有经验。正如这个问题中提到的, 在 CakePHP 中使用 DISTINCT 查找函数,以这种方式使用 DISTINCT:
$this->Model->find('all', array('fields'=>'DISTINCT field_name'));
不返回 DISTINCT 值,而是返回所有行。事实上,这里的 DISTINCT 完全没有意义,因为出于某种原因,CakePHP 添加了TableName
. id
在 SQL 查询中(为什么??我可以删除 id 引用吗??),有效地返回每个 DISTINCT 主键(=所有行=无帮助)。
所以,我仍然想返回特定 field_name 列的 DISTINCT 值。我不能只使用 find('all') 或 find('list') 函数吗?使用上面链接中描述的 Set::extract() 函数真的是正确的方法吗?这似乎是 CakePHP 的一个过于间接的解决方案,通常 Cake 让我的生活更轻松。:-) 一起使用 find 和 DISTINCT 的正确方法是什么?也许 DISTINCT 不适用于 find()?
看着 CookBook,他们说:“做 DISTINCT 查询的一个简单示例。您可以以类似的方式使用其他运算符,例如 MIN()、MAX() 等:”
<?php
array(
'fields' => array('DISTINCT (User.name) AS my_column_name'),
'order' = >array('User.id DESC')
)
?>
来源:http ://book.cakephp.org/2.0/en/models/retrieving-your-data.html
这表明 DISTINCT 应该可以使用,但这里是什么?(User.name) 是否对应于我想要 DISTINCT 的 field_name 还是 my_column_name 我的 field_name?
最后,当从 CakePHP 1.x 迁移到 CakePHP 2.x 时,这是否发生了任何变化?即在 Stackoverflow 上看到的 CakePHP 1.x 的答案是否仍然相关?
提前致谢!