【发布时间】:2012-01-27 09:54:56
【问题描述】:
Yii 1.1 应用程序开发 Cookbook 解释了一种使用来自相关 Active Record 模型的数据来搜索相关模型的方法。此方法在第 193 页和第 194 页中进行了说明。我已尝试将此方法集成到我的应用程序中,但它不起作用。谁能解释一下这个功能在 Yii 框架版本 1.1.8 中是否仍然可用
在这个位置,我还可以找到用于搜索数据表单相关活动记录模型的 cmets。但它也不起作用。 http://www.yiiframework.com/doc/api/1.1/CDbCriteria
我有订单表和用户表
订单表和用户表有一对多关系。
用户有很多订单,而订单只有一个用户。
所以,我正在编辑 CDbCriterial 以在订单表搜索条目中包含用户表名称和电子邮件字段。
订单表有如下关系
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'comments' => array(self::HAS_MANY, 'Comment', 'order_id'),
'user' => array(self::BELONGS_TO, 'User', 'user_id'),
'orderstatus' => array(self::BELONGS_TO, 'Orderstatus', 'orderstatus_id'),
'commentCount' => array(self::STAT, 'Comment' , 'order_id')
);
}
这是包含用户表名称字段的搜索/过滤条件
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('order_create_date',$this->order_create_date,true);
$criteria->compare('price',$this->price,true);
$criteria->compare('bank_account_number',$this->bank_account_number,true);
$criteria->compare('hardwaredetail_Id',$this->hardwaredetail_Id);
$criteria->compare('user_id',$this->user_id);
$criteria->compare('order_update_date',$this->order_update_date,true);
$criteria->compare('is_received',$this->is_received);
$criteria->compare('order_received_date',$this->order_received_date,true);
$criteria->compare('is_notify_by_email',$this->is_notify_by_email);
$criteria->compare('warehouse_offered_price',$this->warehouse_offered_price,true);
$criteria->compare('warehouse_offered_price_date',$this->warehouse_offered_price_date,true);
$criteria->compare('orderstatus_id',$this->orderstatus_id);
$criteria->together = true;
$criteria->with = array('user');
$criteria->compare('user.name',$this->user,true);
//$criteria->compare('user.name',$this->user->name);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
并编辑订单管理页面以显示名称字段如下
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'order-grid',
'dataProvider'=>$model->search(),
//'filter'=>$model,
'columns'=>array(
'id',
'order_create_date',
'price',
'bank_account_number',
array(
'name'=>'user',
'value'=>'$data->user->name'
),
),
));
返回错误信息
通过应用 thaddeusmt 提供的解决方案解决了 id 列歧义问题后,我遇到了以下错误消息。
提前感谢您的帮助
【问题讨论】:
-
你能发布一些你的代码吗?至少样品..
-
我已按照您的要求添加了代码
-
您收到任何错误信息吗?并且你添加了“public $user;”在第一行排序类模型?
-
@a.v 是的,我收到以下错误消息/我已经用错误消息更新了问题