搜索
系统检测到您的用户名不符合规范:

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

浏览:1529 发布日期: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数据进行排序!
收藏
zhangrx
积分:920 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /