一对多模型关联,实现对辅表的排序

浏览:283 发布日期:2018/06/13 分类:功能实现
一对多模型关联结束后,由于数据集跟自己期望的不一样,想要做一下排序后,再分配给前台模板使用。
Genius表 存放着最基本的天才用户信息, 其主键是g_id;
Education表 存放的是天才用户受到的教育信息,其主键是ted_id;
两个表是通过 Education表 的 ted_gid 进行关联的;
现在的需求是,通过g_id 查询出某一个天才所受过的教育,且要根据时间做一下排序,否则结果不直接。
本来想在Model中 直接加入order还省事$this->hasMany('xxxx','xxxx','xxxx')->order('排序字段');但是想想毕竟很多地方都有可能调用,这里用顺序,那里用倒叙,改了模型毫无意义,这个方案就作罢了,还是想点别的办法吧~~
排序?! 嗯....order()先试一下吧$genius_info = GeniusModel::where("g_id",$id)->find();//插叙某天才的基本信息
 $edu_list = $genius_info->education->order("ted_sdate asc")->toArray();//获取排序后的结果

理想很丰满,但是现实很骨感,报错了.....
致命错误: Call to undefined method think\model\Collection::order()
既然报错了,那就找找提示类跟【其父类】吧! 最终在其父类找了一个方法---sort(xxxxx)【对数据排序,并返回排序后的数据组成的新 Collection 实例,参数是一个回调函数】.哦,原来可以有排序啊,那就试试吧,修正代码如下:$genius_info = GeniusModel::where("g_id",$id)->find();//获取基础表信息
            $edu_list = $genius_info->education->sort(function($pre,$after){
                if($pre->ted_sdate<$after->ted_sdate){
                    return "-1";
                }else{
                    return "1";
                }
            });
最后想要看一下结果,var_dump($edu_list->toArray());符合要求~~
但是,这个地方有个前提 ,我是对符合主表Genius表要求的,所有辅表Education数据进行排序!
评论( 相关
后面还有条评论,点击查看>>