Cakephp 3:在 "where" 条件下使用“$this->alias()”

Cakephp 3: use of "$this->alias()" in "where" conditions

为了避免在涉及多个表的查询时出现 Column 'xxx' in where clause is ambiguous 错误,这些表对给定的列共享相同的名称,我现在系统地在 where 条件中包含 $this->alias() ,如下所示:

$table->find()->where([$table->alias() . '.field' => 'value']);

这被认为是一种好的做法吗?

由于某些我忽略的原因,这样做会导致在对包含下划线的表使用 updateAll 而不是 find 时出错。示例:

$table = TableRegistry::get('BlogPosts');
$table->updateAll(
    [$table->alias() . '.title' => 'new title'],
    [$table->alias() . '.id'    => 1]
);

会抛出错误: Column not found: 1054 Unknown column 'BlogPosts.id' in 'where clause' 用于准备好的查询 UPDATE blog_posts SET BlogPosts.title = :c0 WHERE BlogPosts.id = :c1

这是 cakephp 3 的错误吗?还是我在滥用$table->alias()

您不应为 updateAll 的条件设置别名。原因是那个方法只涉及一个table,所以不需要别名