table 的别名
Alias for table
我有两个 table。第一个 - 产品,第二个 - 类别。它们包含具有相同名称的字段 - 'name'。
在模型产品中,我添加了以下代码:
public function getCategory(){
return $this->hasOne(Category::className(), ['id' => 'cat_id']);
}
我需要在 GridView 中显示来自 table 类别的列。我在 ProductSearch 模型中为此添加了以下代码:
$query->joinWith(['category' => function($query) { $query->from(['cat' => 'category']); }]);
此代码为 table 类别添加别名 cat。
之后我得到一个错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `product` LEFT JOIN `category` `cat` ON `product`.`cat_id` = `cat`.`id` WHERE `name` LIKE '%aasdadadsdgdgdg%'
Error Info: Array
(
[0] => 23000
[1] => 1052
[2] => Column 'name' in where clause is ambiguous
)
如何为 table 产品添加别名?
打开您的 ProductSearch
模型,导航到 search($params)
方法。下面你应该看到过滤部分:
$query->andFilterWhere(['like', 'name', $this->name])
通过在该行写入 table name product
来修复不明确的部分。
$query->andFilterWhere(['like', 'product.name', $this->name])
或..
$query->andFilterWhere(['like', self::tableName() . '.name', $this->name])
这将提供应从 product.name
table 查询名称的准确信息。
有趣的是,在加入 Category
table.
之前,您不会收到错误消息
恕我直言,发现这个错误是最糟糕的,因为看起来一切正常,直到使用搜索功能。
我有两个 table。第一个 - 产品,第二个 - 类别。它们包含具有相同名称的字段 - 'name'。 在模型产品中,我添加了以下代码:
public function getCategory(){
return $this->hasOne(Category::className(), ['id' => 'cat_id']);
}
我需要在 GridView 中显示来自 table 类别的列。我在 ProductSearch 模型中为此添加了以下代码:
$query->joinWith(['category' => function($query) { $query->from(['cat' => 'category']); }]);
此代码为 table 类别添加别名 cat。
之后我得到一个错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `product` LEFT JOIN `category` `cat` ON `product`.`cat_id` = `cat`.`id` WHERE `name` LIKE '%aasdadadsdgdgdg%'
Error Info: Array
(
[0] => 23000
[1] => 1052
[2] => Column 'name' in where clause is ambiguous
)
如何为 table 产品添加别名?
打开您的 ProductSearch
模型,导航到 search($params)
方法。下面你应该看到过滤部分:
$query->andFilterWhere(['like', 'name', $this->name])
通过在该行写入 table name product
来修复不明确的部分。
$query->andFilterWhere(['like', 'product.name', $this->name])
或..
$query->andFilterWhere(['like', self::tableName() . '.name', $this->name])
这将提供应从 product.name
table 查询名称的准确信息。
有趣的是,在加入 Category
table.
恕我直言,发现这个错误是最糟糕的,因为看起来一切正常,直到使用搜索功能。