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数据进行排序!
