停止cakephp3列出它用find()生成的select查询中的所有字段

kse8i1jr  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(261)

我正在尝试优化一个大型mysql查询。我意外地发现一个包含所有字段的查询( SELECT Orders.id AS Orders__id, <...> ; 默认的cakephp行为)比仅使用 SELECT * FROM -0.324秒对0.084秒;检查了好几次。
我想知道我是否可以禁止这种行为。我试过:
添加 'fields' => '*'find() 选择或呼叫 ->select('*') ,但它会导致 SELECT Orders.* AS Orders__* 抛出一个sqlstate[42000]错误。
用…除去别名标题 ->select(['*' => '*']) 根据query builder.html#选择数据,但这会导致 SELECT * AS * 这也会引发一个错误
使用 ->enableAutoFields(false) 我也试过谷歌,但我甚至不知道怎么称呼这个

6ie5vjzr

6ie5vjzr1#

似乎你想覆盖orm的好处,所以我建议一个不应该在正常操作中使用的方法。

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

如果要创建实体,必须允许select语句对字段进行别名,这样上面的语句就不会为您提供实体。
我的意见是,您应该使用正常的选择和优化您的缓存策略为这些数据。

lfapxunr

lfapxunr2#

显然,我不能不列出字段,因为cakephp orm是如何设计的。
因此,通过手动白名单只解决我实际需要的字段。这个查询毕竟还是比较快的(根据我的测量大约是100毫秒)。

相关问题