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,所以不需要别名
为了避免在涉及多个表的查询时出现 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,所以不需要别名