Yii2滤波器相关模型

Yii2滤波器相关模型,yii,yii2,Yii,Yii2,我有一个Sale模型,它包含一个property\u idFK toproperty模型 在属性模型上,有一个字段office\u id Sale controller包含一个部分搜索视图,我正在使用该视图尝试通过office id进行筛选 在搜索函数中,我首先将关系设置为find(): 过滤条款: $query->andFilterWhere(['=', 'property.office_id', $params['SaleSearch']['office']]); 其中,$param

我有一个
Sale
模型,它包含一个
property\u id
FK to
property
模型

在属性模型上,有一个字段
office\u id

Sale controller包含一个部分搜索视图,我正在使用该视图尝试通过office id进行筛选

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

过滤条款:

$query->andFilterWhere(['=', 'property.office_id', $params['SaleSearch']['office']]);
其中,
$params['SaleSearch']['office']
实际上包含正确的office\u id

我得到一个例外:

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'

我错过了什么

我认为您应该设置搜索的连接

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

我认为这会起作用,但如何在闭包函数中获得$params呢?它在那里给出了未定义的变量?对于在匿名函数中传递参数,您可以使用。。。“使用”。。。我已经更新了答案。。
public function getOffice()
{
    return $this->hasOne(Office::className(), ['office_id' => 'office_id']);
}
$query->joinWith(['office' => function ($q) use ($params['SaleSearch']['office']]) {
            $q->andFilterWhere(['=', 'property.office_id', $params['SaleSearch']['office']]);
        }]);