2017-04-25 15:16:44 2247次浏览 3条回答 0 悬赏 10 金钱

第一种:用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;
}

}

  • 回答于 2017-04-25 17:11 举报

    试试用ActiveRecord,很方便的

    1 条回复
    回复于 2017-04-26 15:54 回复

    第二种就是采用的ActiveRecord,我要查询多个关联表的数据,所以重写的fields()方法使用关联,得到关联表的数据,但是感觉没有第一种查询的快。

  • 回答于 2017-04-25 17:23 举报

    ActiveRecord 同意楼上

  • 回答于 2017-04-27 09:56 举报

    ActiveRecord 表之间关联提供with 文档里面有 好好看看

    1 条回复
    回复于 2017-04-27 14:25 回复

    public function getFirm()

    {
        return $this->hasOne(PdFirm::className(),['firm_id'=>'firm_id']);
    }
    

    这是采用的关联,关联之后再重写fields方法,使用$this->firm得到关联的数据。

您需要登录后才可以回答。登录 | 立即注册
cong4212
助理

cong4212

注册时间:2017-04-03
最后登录:2017-08-05
在线时长:6小时47分
  • 粉丝2
  • 金钱135
  • 威望0
  • 积分195

热门问题