Laravel问答8 Migration时间线API

简介

首页需要获取时间线的数据,时间线的数据是问题和回答的组合,作为一个综合模型调用的功能,可作为通用API。

创建路由
由于时间线调用多张表的数据,因此将其放置在单独的控制器中实现。

Route::any('/api/timeline','CommonController@timeline');

路由文件中提取公共分页函数

function paginate($page=1,$limit=15){
    $page = $page?$page-1:0;
    $limit = $limit?:15;
    return [$limit, $page*$limit];
}

创建控制器

php artisan make:controller CommonController

实现接口

/*获取时间线API*/
public function timeline()
{
    //获取页码和每页显示条数
    list($limit, $skip)=paginate(rq('page'),rq('limit'));
    //获取所有问题与答案
    $questions = questionInstance()->limit($limit)->skip($skip)->orderBy('created_at','desc')->get();
    $answers = answerInstance()->limit($limit)->skip($skip)->orderBy('created_at','desc')->get();
    //将问题和答案合并
    $data = $questions->merge($answers);//merge()合并集合存在bug
    //根据创建时间排序
    $data = $data->sortBy(function($item){
        return $item->created_at;
    });
    return $data->values()->all();
}

# 版本2
/*API 时间线*/
public function timeline()
{
    list($limit,$skip) = pager(rq('page'), rq('limit'));

    //获取所有问题和回答
    $questions = question()->limit($limit)->skip($skip)->orderBy('created_at', 'DESC')->get();
    $answers = answer()->limit($limit)->skip($skip)->orderBy('created_at', 'DESC')->get();

    //合并数据后按时间降序排列
    $data = $questions->merge($answers);
    $data->sortByDesc(function($item){
       return $item->created_at;
    });

    //去除默认的 key
    $data  = $data->values()->all();

    return $data;
}

遗留问题
当前时间线中糅合了问题和回答,若种类比较多时,此时为区分每条记录所代表的类型,需添加类型字段以指明具体数据所属模块。

你可能感兴趣的:(Laravel问答8 Migration时间线API)