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.

之前,您不会收到错误消息

恕我直言,发现这个错误是最糟糕的,因为看起来一切正常,直到使用搜索功能。