0

在使用这样的代码时:

$Model->find('all', array(
  'conditions' => array(
    'field' => '1111'
  )
));

where field is varchar mysql field cake 生成如下查询:

SELECT * FROM Models WHERE field = 1111;

而不是预期

SELECT * FROM Models WHERE field = '1111';

这也使得 mysql 将整个数据库转换为 int 而不是使用字符串索引。我正在尝试优化由其他人编写的已经工作的系统,并且快速 grep 显示了我需要“修复”的数千个查找。因此,唯一可接受的解决方案应该是模型层或 mysql 层。

tl; dr:如何让 Cake 将整数字符串从条件传递给 mysql 作为字符串而不是数字?

4

1 回答 1

0

在用完评论中的字符后。你真的应该这样做吗:

在 PHP(蛋糕)级别进行优化。find() 包装器并不理想。它们非常强大但非常缓慢。它们允许快速开发,但需要比必要更多的查询。

所以你应该尝试做一些瓶颈修复。DB 可能(在内部)仍然是调度程序链中最快的部分 - 有或没有演员表。

为了更具体:

  • 如果您觉得必须这样做,请使用手动查询()
  • 尽可能使用原子方法(updateAll、deleteAll)
  • 如果您使用带有连接的 find() 调用来减少查询量,请尝试使用可包含和可链接的行为(尤其是最后一个)
  • 以某种方式缓存您的数据库结果
于 2012-03-06T21:42:14.827 回答