yii2 查询数据方法哪一种更好,可维护性,可扩展性,条理性 [ 2.0 版本 ]
第一种:用leftjoin把所有需要的数据找到,一条复杂的SQL;
public function searchApply($params)
{
$query=(new Query())->select([
CrmActiveApply::tableName().'.acth_id',//活动报名id
CrmActiveApply::tableName().'.acth_name',//报名人姓名
CrmActiveApply::tableName().'.acth_date',//报名日期
CrmActiveApply::tableName().'.acth_position',//职位
CrmActiveApply::tableName().'.acth_phone',//手机号
CrmActiveApply::tableName().'.acth_email',//邮箱
CrmActiveApply::tableName().'.acth_ismeal',//是否用餐
CrmActiveApply::tableName().'.acth_ispay',//是否需缴费
CrmActiveApply::tableName().'.acth_payflag',//是否已缴费
CrmActiveApply::tableName().'.acth_isbill',//是否开票
CrmActiveApply::tableName().'.acth_ischeckin',//是否已签到
CrmActiveName::tableName().'.actbs_start_time',//活动开始时间
CrmActiveName::tableName().'.actbs_end_time',//活动结束时间
CrmActiveName::tableName().'.actbs_day',//活动天数
CrmActiveName::tableName().'.actbs_hour',//活动小时数
CrmActiveName::tableName().'.actbs_minute',//活动分钟数
CrmActiveName::tableName().'.actbs_name',//活动名称
CrmActiveType::tableName().'.acttype_name',//类型名
CrmCustomerInfo::tableName().'.cust_id',//客户ID
CrmCustomerInfo::tableName().'.cust_sname',//客户全称
'bp1.bsp_svalue AS joinIdentity',//参会身份
])->from(CrmActiveApply::tableName())
->leftJoin(CrmActiveName::tableName(),CrmActiveName::tableName().'.actbs_id='.CrmActiveApply::tableName().'.actbs_id')//活动名称表
->leftJoin(CrmActiveType::tableName(),CrmActiveType::tableName().'.acttype_id='.CrmActiveApply::tableName().'.acttype_id')//活动类型表
->leftJoin(CrmCustomerInfo::tableName(),CrmCustomerInfo::tableName().'.cust_id='.CrmActiveApply::tableName().'.cust_id')//客戶信息表
->leftJoin(BsPubdata::tableName().' bp1','bp1.bsp_id='.CrmActiveApply::tableName().'.acth_identity');//参会身份
$dataProvider=new ActiveDataProvider([
'query'=>$query,
'pagination'=>[
'pageSize'=>$params['rows']
],
]);
$query->andFilterWhere([
CrmActiveApply::tableName().'.acttype_id'=>isset($params['acttype_id'])?$params['acttype_id']:'',
CrmActiveApply::tableName().'.actbs_id'=>isset($params['actbs_id'])?$params['actbs_id']:'',
CrmActiveApply::tableName().'.acth_ischeckin'=>isset($params['acth_ischeckin'])?$params['acth_ischeckin']:'',
]);
$query->andFilterWhere(['like',CrmCustomerInfo::tableName().'.cust_sname',isset($params['cust_sname'])?$params['cust_sname']:'']);
$query->andFilterWhere(['like',CrmActiveApply::tableName().'.acth_name',isset($params['acth_name'])?$params['acth_name']:'']);
$query->andFilterWhere(['>=',CrmActiveName::tableName().'.actbs_start_time',isset($params['actbs_start_time'])?$params['actbs_start_time']:'']);
$query->andFilterWhere(['<=',CrmActiveName::tableName().'.actbs_end_time',isset($params['actbs_end_time'])?$params['actbs_end_time']:'']);
return $dataProvider;
}
第二种:使用hasOne,hasMany关联,然后重写fields方法;
class PdVisitResumeShow extends PdVisitResume
{
public function fields()
{
$fields=parent::fields();
//厂商编号
$fields['firm_code']=function(){
return $this->firm['firm_code'];
};
//厂商全称
$fields['firm_sname']=function(){
return $this->firm['firm_sname'];
};
//厂商简称
$fields['firm_shortname']=function(){
return $this->firm['firm_shortname'];
};
//厂商类型
$fields['firmType']=function(){
return $this->firm['firmType']['bsp_svalue'];
};
//厂商来源
$fields['firmSource']=function(){
return $this->firm['firmSource']['bsp_svalue'];
};
//拜访状态
$fields['visitStatus']=function(){
switch($this->vih_status){
case self::VISIT_ING:
return '拜访中';
break;
case self::VISIT_COMPLETE:
return '拜访完成';
break;
default :
return '';
}
};
//是否为集团供应商
$fields['groupSupplier']=function(){
switch($this->firm['firm_issupplier']){
case '1':
return '是';
break;
case '0':
return '否';
break;
default :
return '';
}
};
//厂商品牌
$fields['firm_brand']=function(){
return $this->firm['firm_brand'];
};
//分级分类
$fields['oneCategory']=function(){
return $this->firm['categoryName'];
};
return $fields;
}
}
共 3 个回答
cong4212
注册时间:2017-04-03
最后登录:2017-08-05
在线时长:6小时47分
最后登录:2017-08-05
在线时长:6小时47分
- 粉丝2
- 金钱135
- 威望0
- 积分195