Yii 过滤器搜索适用于一种关系但不适用于其他关系
Yii filter search working for one relation but not for other
我正在使用 Yii GridView 过滤器,我的数据来自 Purcahses table。
table 的真实意义
1.供应商
2.客户
以下是我在采购模型中的关系
'vendor' => array(self::BELONGS_TO, 'Vendors', 'Vendor'),
'client' => array(self::BELONGS_TO, 'Clientsinfo', 'clientID'),
我在我的管理视图中使用该关系,下面是 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' => '',
),
),
));
最后是模型搜索功能,它与其他 table 一起使用以获取数据
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,
));
}
成功从客户端获取数据,但是当我使用 vendor fitter 时它抛出以下错误
CDbException
CDbCommand 无法执行 SQL 语句:SQLSTATE[42S22]:未找到列:1054 未知列
'vendor.VendorName' 在 'where clause' 中。执行的 SQL 语句是: SELECT COUNT(DISTINCT t
.PurchaseID
) FROM purchases
t
LEFT OUTER JOIN clientsinfo
client
ON (t
.clientID
=client
.ClInfoID
) WHERE ((Vendor=:ycp0) AND (vendor.VendorName LIKE :ycp1)) (C:\xampp\htdocs\laurenparker\framework
\db\CDbCommand.php:543)
#0 C:\xampp\htdocs\laurenparker\framework\db\CDbCommand.php(433): CDbCommand-
queryInternal('fetchColumn', 0, Array)
您将覆盖 criteria
中的关系。改变这个:
$criteria->with = array('vendor');
$criteria->with = array('client');
为此:
$criteria->with = array('vendor', 'client');
我正在使用 Yii GridView 过滤器,我的数据来自 Purcahses table。 table 的真实意义 1.供应商 2.客户 以下是我在采购模型中的关系
'vendor' => array(self::BELONGS_TO, 'Vendors', 'Vendor'),
'client' => array(self::BELONGS_TO, 'Clientsinfo', 'clientID'),
我在我的管理视图中使用该关系,下面是 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' => '',
),
),
));
最后是模型搜索功能,它与其他 table 一起使用以获取数据
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,
));
}
成功从客户端获取数据,但是当我使用 vendor fitter 时它抛出以下错误
CDbException
CDbCommand 无法执行 SQL 语句:SQLSTATE[42S22]:未找到列:1054 未知列
'vendor.VendorName' 在 'where clause' 中。执行的 SQL 语句是: SELECT COUNT(DISTINCT t
.PurchaseID
) FROM purchases
t
LEFT OUTER JOIN clientsinfo
client
ON (t
.clientID
=client
.ClInfoID
) WHERE ((Vendor=:ycp0) AND (vendor.VendorName LIKE :ycp1)) (C:\xampp\htdocs\laurenparker\framework
\db\CDbCommand.php:543)
queryInternal('fetchColumn', 0, Array)
您将覆盖 criteria
中的关系。改变这个:
$criteria->with = array('vendor');
$criteria->with = array('client');
为此:
$criteria->with = array('vendor', 'client');