Yii2.0 后台列表整理(关联查询)
来源:互联网 发布:kiki软件下载 编辑:程序博客网 时间:2024/06/08 12:36
今天是2016-4-16日,周六,对我来说,我上周经历了延期一个周的连续加班时间,让我真的很累,很受不了,其原因在于我是一个菜鸟,一个女程序猿小白,有时候基础真的很差,犯过的错,经常还会再犯,就是因为这,我也没少被我们组长说道,当然了,他也是好心,可是我想说,有时候我真的好累啊,我也想学好,什么都会,可是我就是不会,比起其他的人我明显处于劣势. 然后我们公司这次的加薪,我不在名单之内,原因就是因为技术不好, 其实对于我来说,不光是钱的事,我真该好好反思自己了,每次做什么事都是吊儿郎当,总是坚持不下去,有时候也很讨厌现在的自己,不过,不是有句话说吗,当你意识到你身上的问题时,都不算太晚,所以我已经比自己坚持一项事情,那就是每天学习至少半小时(除了工作时间之外), 我一定要证明给自己看,我不笨,我要自信起来,因为当你都放弃你自己的时候,你说谁还会拉你一把那,凡事全靠自己, 相信自己一定做得更好!
----------------------至现在的菜鸟我
好了, 言归正传.....说说项目遇到的问题和要记住的知识点吧!
我们有个关于crm的后台,就是需要写一些列表,他们之间表关系很复杂.......
我们的项目大致是这样的:
下面我就说说上面的班型,期次, 班级, 负责人, 他们都只通过多个表之间的相互关联得到的结果.下面是我手写的分析:
错误更正: 下面途中最后负责人关联是crm_hmy中的contact_id和crm_contact中的contact_id关联得到charger_id,然后crm_contact_中的charger_id中的crm_employee中的id查出truename
Search文件代码如下:
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; } }
视图文件代码如下:
<?= GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'layout' => "{items}\n{summary}\n{pager}", 'summary' => '总计:<b>{totalCount}</b>', 'pager' => [ 'options' => ['class' => "pagination pull-right"] ], 'columns' => [ ['class' => 'yii\grid\SerialColumn', 'header' => '编号'], 'order_no', [ 'attribute' => 'class_no', 'label' => '产品名称', 'headerOptions' => ['style' => 'color:#337ab7'], 'value' => 'product.class_no', ], [ 'attribute' => 'order_status', 'format' => 'raw', 'label' => '服务状态', 'headerOptions' => ['width' => '120'], 'filter' => Html::dropDownList('OrderSearch[order_status]', $searchModel->order_status, [0 => '待确认', 1 => '服务中', 2 => '已完成'], ['class' => 'form-control', 'prompt' => '所有']), 'value' => function($model, $row) { if ($model->order_status == 0) { return '待确认'; } else if ($model->order_status == 1) { return '服务中'; } else if ($model->order_status == 2) { return '已完成'; } }, ], [ 'attribute' => 'created_at', 'value' => function ($model) { return (isset($model->created_at)) ? date('Y-m-d H:i:s', $model->created_at) : ''; } , 'headerOptions' => ['width' => '190'], ], [ 'attribute' => 'coupon_status', 'label' => '优惠券使用', 'headerOptions' => ['width' => '120', 'style' => 'color:#337ab7'], 'filter' => Html::dropDownList('OrderSearch[coupon_status]', $searchModel->coupon_status, [ 0 => '已购买', 1 => '已兑换'], ['class' => 'form-control', 'prompt' => '所有']), 'value' => function ($model) { if (isset($model->userCoupon->coupon_status)) { return $model->userCoupon->coupon_status == 0 ? '已购买' : '已兑换'; } }, ], [ 'class' => 'yii\grid\ActionColumn', 'header' => '删除', 'headerOptions' => ['style' => 'color:#337ab7'], 'template' => '{delete}', 'buttons' => [ 'delete' => function ($url, $model, $key) { return Html::a(Html::tag('span', '',['class' => "glyphicon glyphicon-trash"]), ['delete', 'id' => $model->id], ['class' => "", 'title' => '删除']); }, ], ], ], ]); ?>
- Yii2.0 后台列表整理(关联查询)
- Yii2.0 关联查询
- Yii2.0 关联查询
- yii2.0 数据库关联查询
- YII2 关联查询使用
- Yii2关联查询用法
- Yii2中多表关联查询
- yii2 三表关联查询
- Yii2 使用九 join关联表查询
- Yii2中多表关联查询(join、joinwith)
- Yii2中多表关联查询hasOne hasMany
- Yii2中多表关联查询hasOne hasMany
- yii2多表关联查询用法总结
- 关于yii2中间表关联查询
- Yii2.0框架基础--数据查询之AR类方法 关联查询
- Yii2.0关联(relation)
- Yii2.0 数据库查询
- Yii2.0 数据库查询
- eclipse配置jdk.mavn
- 2016年最热门的十大微信公众号
- android 文件存储读取
- LintCode 表达树构造(栈,二叉树)
- Android Studio系列教程四--Gradle基础
- Yii2.0 后台列表整理(关联查询)
- 从头认识多线程-1.8 迫使线程停止的方法-暴力Stop方法
- 广播,net模块
- Cursor方法
- 重学数据结构系列之——图论算法之Dijkstra算法
- 从零开始学_JavaScript_系列(九)——dojo(2)(AJAX、时间控件、鼠标事件、样式修改、事件移除、消息发布订阅)
- 短信自动填写
- 设计模式——观察者模式
- 补番计划 (长沙理工大学第十一届程序设计竞赛)(双端队列+set容器+string)