Yii2.0 后台列表整理(关联查询)
2016-04-17 15:31
597 查看
今天是2016-4-16日,周六,对我来说,我上周经历了延期一个周的连续加班时间,让我真的很累,很受不了,其原因在于我是一个菜鸟,一个女程序猿小白,有时候基础真的很差,犯过的错,经常还会再犯,就是因为这,我也没少被我们组长说道,当然了,他也是好心,可是我想说,有时候我真的好累啊,我也想学好,什么都会,可是我就是不会,比起其他的人我明显处于劣势. 然后我们公司这次的加薪,我不在名单之内,原因就是因为技术不好, 其实对于我来说,不光是钱的事,我真该好好反思自己了,每次做什么事都是吊儿郎当,总是坚持不下去,有时候也很讨厌现在的自己,不过,不是有句话说吗,当你意识到你身上的问题时,都不算太晚,所以我已经比自己坚持一项事情,那就是每天学习至少半小时(除了工作时间之外),
我一定要证明给自己看,我不笨,我要自信起来,因为当你都放弃你自己的时候,你说谁还会拉你一把那,凡事全靠自己, 相信自己一定做得更好!
----------------------至现在的菜鸟我
好了, 言归正传.....说说项目遇到的问题和要记住的知识点吧!
我们有个关于crm的后台,就是需要写一些列表,他们之间表关系很复杂.......
我们的项目大致是这样的:
下面我就说说上面的班型,期次, 班级, 负责人, 他们都只通过多个表之间的相互关联得到的结果.下面是我手写的分析:
错误更正: 下面途中最后负责人关联是crm_hmy中的contact_id和crm_contact中的contact_id关联得到charger_id,然后crm_contact_中的charger_id中的crm_employee中的id查出truename
代码如下:
我一定要证明给自己看,我不笨,我要自信起来,因为当你都放弃你自己的时候,你说谁还会拉你一把那,凡事全靠自己, 相信自己一定做得更好!
----------------------至现在的菜鸟我
好了, 言归正传.....说说项目遇到的问题和要记住的知识点吧!
我们有个关于crm的后台,就是需要写一些列表,他们之间表关系很复杂.......
我们的项目大致是这样的:
下面我就说说上面的班型,期次, 班级, 负责人, 他们都只通过多个表之间的相互关联得到的结果.下面是我手写的分析:
错误更正: 下面途中最后负责人关联是crm_hmy中的contact_id和crm_contact中的contact_id关联得到charger_id,然后crm_contact_中的charger_id中的crm_employee中的id查出truename
代码如下:
HmyMemberSerach.php文件 class HmyMemberSearch extends HmyMember { //当你进行关联表时,需要查询其他表中的字段时,所有就需要定义你要查询的字段名称 public $class_no; public $grade_no; /** * @inheritdoc */ public function rules() { //当你在后台列表想要搜索哪个字段时,那么首先这个rules里面就带有这个字段 return [ [['birthday', 'class_no', 'grade_no', class_id', 'charger_id', 'auth_status'], 'integer'], [['truename', 'sex', 'mobile', 'email', 'weixin', 'entry_status'], 'safe'], [['corp_name'], 'string'] ]; } /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { //我查的是认证状态为1的列表 $query = HmyMember::find()->where(['crm_hmy.auth_status' => 1]); $appName = false; $termName = false; $contactName = false; $employeeName = false; try { //获取表名 $termName = Yii::$app->util->getTableName('db', HmyTerm::tableName()); $className = Yii::$app->util->getTableName('db', HmyClass::tableName()); $contactName = Yii::$app->util->getTableName('db', Contact::tableName()); $employeeName = Yii::$app->util->getTableName('db', Employee::tableName()); } catch (\Exception $e) { } //定义一些表的别名,以便下面用 $termNameAlias = 'term'; $classNameAlias = 'class'; $contactNameAlias = 'contact'; $employeeNameAlias = 'employee'; $this->load($params); //关联查询 - 班型, 期次 注:crm_hmy中的class_id关联crm_hmy_term中的id, 查询crm_hmy_term中的name(班型),grade_no(期次) 下面的查询"id",一定要有,因为他们关联到term中的id,所以你要是不查它的话,就会报错... $query->with(['term' => function($query) use ($termName, $termNameAlias) { return $query->from($termName . ' as ' . $termNameAlias)->select('id, name, grade_no'); }]); //关联查询 - 班级 注: crm_hmy中的class_id关联crm_hmy_class中的term_id, 查询crm_hmy_class中的class_no(班级) $query->with(['class' => function($query) use ($className, $classNameAlias) { return $query->from($className . ' as ' . $classNameAlias)->select('term_id , class_no'); }]); //关联查询 - 负责人 注: crm_hmy中的contact_id关联crm_contact中的contact_id,查询出crm_contact中的charger_id, 然后 把crm_contact中的charger_id关联crm_employee中的id,查询负责人truename $query->Joinwith(['contact' => function($query) use ($contactName, $employeeName) { $quer = $query->Joinwith(['employee' => function($quer) use ($employeeName) { return $quer->from($employeeName)->select('id, truename'); }])->from($contactName)->select('contact_id, charger_id'); }]); if (($this->class_id) || ($this->class_no) || ($this->grade_no)) { if ($termName) { //hmy - term 表关联 主要是让表与表之间建立关联 $query->Joinwith(['term' => function($query) use ($termName, $termNameAlias) { return $query->from($termName . ' as ' . $termNameAlias); }]); } if ($className) { //hmy - class 表关联 $query->Joinwith(['class' => function($query) use ($className, $classNameAlias) { return $query->from($className . ' as ' . $classNameAlias); }]); } } $dataProvider = new ActiveDataProvider([ 'query' => $query, 'sort' => [ //查询让id为倒序 'defaultOrder' => ['id'=> SORT_DESC], ], ]); $dataProvider->pagination->pageSize = 10; //让列表显示分页,每页显示10条 if (!$this->validate()) { return $dataProvider; } //一些需要的where条件 $query->andFilterWhere([ 'id' => $this->id, 'charger_id' => $this->charger_id, 'auth_status' => $this->auth_status, 'paystatus' => $this->paystatus, 'create_at' => $this->create_at, 'entry_status' => $this->entry_status, ]); //当搜索期次grade_no term.grade_no -> term.grade_no hmy.class_id -> term.pid if ($this->grade_no) { $query->andFilterWhere(['=', $termNameAlias . '.grade_no', $this->grade_no]) ->andFilterWhere(['=', $termNameAlias . '.pid', $this->class_id]); } else if ($this->class_id){ //当搜索班型 - 不显示父级班型, 只显示子集的 hmy.class_id -> term.pid $query->andFilterWhere(['=', $termNameAlias . '.pid', $this->class_id]); } if ($this->class_no) { //当搜索班级 - class_no class.class_no -> class.class_no $query->andFilterWhere(['=', $classNameAlias . '.class_no', $this->class_no]); } //一些相关的like模糊查询 $query->andFilterWhere(['like', 'crm_hmy' . '.truename', $this->truename]) ->andFilterWhere(['like', 'crm_hmy' . '.mobile', $this->mobile]) ->andFilterWhere(['like', 'crm_hmy' . '.weixin', $this->weixin]) ->andFilterWhere(['like', 'position', $this->position]) return $dataProvider; } }
相关文章推荐
- yii2搭建完美后台并实现rbac权限控制案例教程
- PHP之array_keys()获取数组键名
- ”ftp使用dos命令“
- php实现三级级联下拉框
- php序列化存储数据
- php面向对象的简单用法
- web新手上路
- think php sql () or ()
- PHP学习(十九)--抽象类与接口
- PHP--each与list的用法
- PHP学习(十八)--常见的关键字和魔术方法
- PHP字符串实体操作
- PHP--URL编码函数浅析
- PHP解析URL函数parse_url和parse_str
- MySQL数据库操作类(PHP实现,支持连贯操作)
- PHP字符集操作
- ThinkPHP + Ajax 实现2级联动下拉菜单
- PHP常用的字符串函数
- PHP语言 -- 封装连接数据库类
- thinkphp3.2.3关于模板使用之一二