Activerecord Yii筛选器搜索适用于一个关系,但不适用于其他关系

Activerecord Yii筛选器搜索适用于一个关系,但不适用于其他关系,activerecord,yii,cgridview,Activerecord,Yii,Cgridview,我使用的是Yii GridView过滤器,我的数据来自Purcahses表。 那张桌子与 1.供应商 2.客户 以下是我在购买模式中的关系 'vendor' => array(self::BELONGS_TO, 'Vendors', 'Vendor'), 'client' => array(self::BELONGS_TO, 'Clientsinfo', 'clientID'), 我在admin视图中使用了这种关系,下面是admin.php文件的代码 $this->wid

我使用的是Yii GridView过滤器,我的数据来自Purcahses表。 那张桌子与 1.供应商 2.客户 以下是我在购买模式中的关系

 'vendor' => array(self::BELONGS_TO, 'Vendors', 'Vendor'),
 'client' => array(self::BELONGS_TO, 'Clientsinfo', 'clientID'),
我在admin视图中使用了这种关系,下面是admin.php文件的代码

$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'purchases-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
    array(
        'name' => 'Vendor',
        'value' =>'$data->vendor->VendorName',
    ),
    array(
        'name' => 'clientID',
         'value' =>'$data->client->Company'
    ),

    array(
        'name' => 'PurchaseType',
        'value' => 'Purchasetype::model()->findByPk($data->PurchaseType)->PurchaseType',
        'filter' => '',
    ),

),
));
最后是模型搜索函数,它与和一起使用,从其他表中获取数据

public function search() {
    $criteria = new CDbCriteria;
    $criteria->together = true;
    $criteria->with = array('vendor');
    $criteria->with = array('client');
    $criteria->compare('PurchaseType', $this->PurchaseType);
    $criteria->compare('vendor.VendorName', $this->Vendor, true);
    $criteria->compare('client.Company', $this->clientID, true);
   return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
    ));
}
成功地从客户机获取数据,但当我使用供应商fitter时,它会在下面抛出错误

CDB异常 CDbCommand无法执行SQL语句:SQLSTATE[42S22]:找不到列:1054未知列 “where子句”中的“vendor.VendorName”。执行的SQL语句是:SELECT COUNTDISTINCT t.PurchaseID 在t.clientID=client.ClInfoID上从t离开外部连接clientsinfo客户端 其中Vendor=:ycp0和Vendor.VendorName类似:ycp1 C:\xampp\htdocs\laurenparker\framework \db\CDbCommand.php:543

0 C:\xampp\htdocs\laurenparker\framework\db\CDbCommand.php433:CDbCommand-

queryInternal'fetchColumn',0,数组


你在标准中凌驾于关系之上。更改此项:

$criteria->with = array('vendor');
$criteria->with = array('client');
为此:

$criteria->with = array('vendor', 'client');

您只对语法进行了标准化,但这不是解决方案,我已经尝试过很多次了。它不是标准化,正如我所说的,您正在使用属性覆盖。如果在此之后您仍在使用供应商关系,则它将不起作用。在CDBEException中,您看到,您的查询中没有与供应商的关系。@Yupik感谢兄弟,我刚从联系,并根据您的建议更改代码,它开始工作,谢谢: