我在蛋糕php 2.1中有以下代码。我尝试获取唯一字符串消息的列表,所有重复项均已删除。

$this->loadModel('ErrorMessage');
$this->ErrorMessage->recursive = -1;
$error_messages = $this->ErrorMessage->find('list',
  array(
    'fields' => array('DISTINCT message'),
  )
);


产生以下错误:


  错误:SQLSTATE [42000]:语法错误或访问冲突:1064您
  您的SQL语法有错误;检查对应的手册
  您的MySQL服务器版本,以在'DISTINCT附近使用正确的语法
  ErrorMessage. messageintermatteerror_messages AS
  第1行的“ ErrorMes”
  
  SQL查询:SELECT ErrorMessageid,DISTINCT ErrorMessage. message FROM intermatteerror_messages AS ErrorMessage在哪里1
  = 1


有趣的部分是在生成的查询中; Cake已自动包含id字段!

我单独测试查询,它会产生预期的结果:(唯一字符串列表)

SELECT DISTINCT message FROM error_messages;


这是创建表供参考:

CREATE TABLE `error_messages` (
    `id` INT(10) NOT NULL AUTO_INCREMENT,
    `message` MEDIUMTEXT NULL COLLATE 'utf8_unicode_ci',
    `figure` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
    `created` DATETIME NULL DEFAULT NULL,
    `modified` DATETIME NULL DEFAULT NULL,
    PRIMARY KEY (`id`),
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB
ROW_FORMAT=COMPACT;


所以问题是,为什么蛋糕会自动包含id字段,我如何告诉蛋糕不要这样做?

我当然可以使用查询,但这不是“不错”。 ;)

最佳答案

是的,CAKEPHP将做到这一点,您可以做的是使用GROUP BY子句来解决此问题,

$error_messages = $this->ErrorMessage->find('list', array(
                                                'fields'=>'message',
                                                'group' => 'message'));

关于php - Cake PHP自动将ID字段添加到SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24207033/

10-11 01:54
查看更多