Yii2过滤器相关模型

时间:2016-07-09 15:45:36

标签: yii yii2

我有一个Sale模型,其中包含property_id FK到Property模型。

在属性模型上,有一个字段office_id

Sale控制器包含一个部分_search视图,我用它来尝试通过office_id进行过滤。

在搜索功能中,我首先将关系设置为find():

$query = sale::find()->with([
        'property',
        'listerSaleStaff',
        'listerSaleStaff.staff',
        'sellerSaleStaff',
        'sellerSaleStaff.staff',
    ]);

过滤条款:

$query->andFilterWhere(['=', 'property.office_id', $params['SaleSearch']['office']]);

其中$params['SaleSearch']['office']确实包含正确的office_id

我收到了PDOException:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'property.office_id' in 'where clause'
The SQL being executed was: SELECT COUNT(*) FROM `sale` WHERE ((`settle_date` >= '2016-07-03') AND (`settle_date` <= '2016-07-31')) AND (`property`.`office_id` = '5')
Error Info: Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'property.office_id' in 'where clause'

属性模型确实包含关系:

public function getOffice()
{
    return $this->hasOne(Office::className(), ['office_id' => 'office_id']);
}

我缺少什么?

1 个答案:

答案 0 :(得分:0)

我认为你应该设置搜索联接

$query->joinWith(['office' => function ($q) use ($params['SaleSearch']['office']]) {
            $q->andFilterWhere(['=', 'property.office_id', $params['SaleSearch']['office']]);
        }]);