PHP7中文手册2018 带注释 最新chm版
8个步骤实现Yii多表关联。
有两个表:产品表product、点评表dianping。通过点评表对产品进行点评。 前提:两表存在关联关系(如通过外键关联):dianping的外键为pro_id,对应product中的id。 需求:实现:在搜索列表页面,dianping表的pro_id,想到的是产品名。 dianping表的models: class Dianping extends CActiveRecord { ... } 第一步:在relations方法中:定义关联关系 (models中) public function relations(){ return array( 'pro' => array(self::BELONGS_TO, 'Product', 'pro_id'), ); } 在gii生成models时,已经自动生成 第二步: 为模型添加属性 (models中) class Dianping extends CActiveRecord { public $pro_name; ... } 第三步: 在搜索规则rules()中添加新属性 (models中) class Dianping extends CActiveRecord { ... public function rules() { return array( ... array( 'xxx,yyy,pro_name', 'safe', 'on'=>'search' ), ); } } 第四步: 设置显示的样式 (models中) public function attributeLabels() { return array( 'id' => 'ID', 'name' => '点评标题', 'pro_name' => '产品名', ); } 第五~七步: 配置search()方法 (models中) public function search(){ $criteria=new CDbCriteria; $criteria->with = array('pro'); ---》 第五步: 使用with进行积极关联查询 $criteria->compare('id',$this->id); $criteria->compare('name',$this->name,true); …… // pro与relations()定义的相对应,proname是关系表中的字段 $criteria->compare('pro.proname', $this->pro_name, true); 第六步: 设置新添加属性$pro_name对应的查询字段 return new CActiveDataProvider($this, array( 'criteria'=>$criteria, 'sort'=>array( 'attributes'=>array( 第七步: 设置新添加的属性可以实现排序功能,并设置默认排序 'pro_name'=>array( 'asc'=>'pro.proname', 'desc'=>'pro.proname DESC', ), '*', ), ), )); } 第八步: 在views中接收值 (views中:admin.php) <?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'dianping-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'name', …… array( 'name'=>'pro_name', 'value'=>'$data->pro->proname' ), array( 'class'=>'CButtonColumn', ), ), )); 结束!!!!!! 参考: http://www.yiiframework.com/wiki/281/searching-and-sorting-by-related-model-in-cgridview/
转载请注明:谷谷点程序 » Yii:多表关联 relations