我有产品表和产品系列表。产品与产品线有关系。我想要一个搜索框,并从productlines表中搜索产品表和字段中的字段。
我的产品搜索模型
public function search($params)
{
$query = Product::find()->where(['product_id' => $this->getProductID()]);
// add conditions that should always apply here
$query->joinWith('productlines');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
$this->load($params);
if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
}
// grid filtering conditions
$query->andFilterWhere([
'product_id' => $this->product_id,
'product_region' => $this->product_region,
'product_created' => $this->product_created,
'product_lastchecked' => $this->product_lastchecked,
'sdsref_id' => $this->sdsref_id,
]);
// var_dump($this->getProductID()); exit();
$query->andFilterWhere(['like', 'product_name', $this->product_name])
->andFilterWhere(['like','product_id', $this->product_id])
->orFilterWhere(['like', 'product_catalog', $this->code])
->andFilterWhere(['=', 'product_aka', $this->product_aka])
->orFilterWhere(['like', 'internal_code' , $this->code]);
return $dataProvider;
}
当我这样做时,我收到错误:
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'product_id' in where clause is ambiguous
The SQL being executed was: SELECT COUNT(*) FROM `sim_product` LEFT JOIN `sim_productlines` ON `sim_product`.`product_id` = `sim_productlines`.`product_id` WHERE ((`product_id` IN ('2', '3')) OR (`product_catalog` LIKE '%A%')) OR (`internal_code` LIKE '%A%')
任何人都可以帮助我在哪里出错,以及可能的解决方案。
由于
答案 0 :(得分:0)
Yii2允许您在ActiveQuery中为列名添加前缀,例如:
$query->andFilterWhere(['like', 'product.product_name', $this->product_name])
->andFilterWhere(['like','productline.product_id', $this->product_id])
->orFilterWhere(['like', 'productline.product_catalog', $this->code])
->andFilterWhere(['=', 'product.product_aka', $this->product_aka])
->orFilterWhere(['like', 'product.internal_code' , $this->code]);
来源:http://www.yiiframework.com/doc-2.0/guide-db-active-record.html#relational-data
参见"加入关系"