Yii2单个搜索框用于搜索两个不同表格中的字段

时间:2016-07-27 10:55:26

标签: search yii2 multiple-tables yii2-model multiple-models

我有产品表和产品系列表。产品与产品线有关系。我想要一个搜索框,并从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%')

任何人都可以帮助我在哪里出错,以及可能的解决方案。

由于

1 个答案:

答案 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

参见"加入关系"