阻止 CakePHP 3 列出它使用 find() 生成的 SELECT 查询中的所有字段

Stop CakePHP 3 from listing all fields in the SELECT query it generates with find()

我正在尝试优化大型 MySQL 查询。我无意中发现,与仅列出 SELECT * FROM 的查询相比,包含所有字段的查询(SELECT Orders.id AS Orders__id, <...>;默认的 CakePHP 行为)需要 4 倍的时间 - 0.324 秒对 0.084 秒;检查了几次。

我想知道我是否可以禁用此行为。我试过:

我也试过Google但我什至不知道怎么称呼这个

您似乎想要覆盖 ORM 的好处,所以我将建议一种不应在正常操作中使用的方法。

$datasource = ConnectionManager::get('default');
$datasource->execute('SELECT * FROM some_table;');

如果您想混合实体,您必须允许 select 语句为字段设置别名,这样上面的内容就不会为您提供实体。

我的意见是您应该使用正常的 select 并针对这些数据优化您的缓存策略。

显然,由于 CakePHP ORM 的设计方式,我无法列出字段。

因此,由 manually whitelisting only the fields I actually need 解决。毕竟查询还是比较快的(据我测量大约100ms)。