thinkphp6 模型自定义排序

BUG员 32 2020-11-19

业务场景:用户浏览过的酒店记录

业务解决方案:如果采用Mysql记录太过于麻烦,我这面用redis的Key=>value将每次浏览过的数据已JSON数组存入,

$redisArr = cache($redisKey);
if (!$redisArr) {
    cache($redisKey, json_encode([$hotelId]));
} else {
    $redisArr = json_decode($redisArr, true);
    if (array_search($hotelId, $redisArr) === false) {
        array_push($redisArr, $hotelId);
        cache($redisKey, json_encode($redisArr));
    }
}

这是写入代码,每次利用array_push加入到最后

那么在取出的时候,查询只需要限定ID即可 

例如这样:

$list = $this->model
    ->where('id', 'in', $hotelIds)
    ->field($field)
    ->order(Str::getModelOrderSort('id', $hotelIds))
    ->page($page, $page_size)
    ->select();

估计是因为版本改动较大的原因,之前的一些方法已经无法使用,经过查看order代码,找到了这个类:

think\db\Raw

这里我就将方法贴出来,你们直接使用即可,记得引入该类:

/**
 * @param string $field [字段]
 * @param array $sortArr [排序数组]
 * @return Raw
 * 时间:2020/11/19 16:17
 * 联系:9258405
 * 生成MODEL自定义顺序
 */
public static function getModelOrderSort(string $field, array $sortArr): Raw
{
    return new Raw("field($field," . implode(',', $sortArr) . ")");
}

好了,这就是解决办法,如果有什么问题,请直接联系我QQ,或者邮箱也行

上一篇:Linux安装LibreOffice7 2020
下一篇:已是最新文章
相关文章

 发表评论

暂时没有评论,来抢沙发吧~