1 回答
TA贡献1812条经验 获得超5个赞
+1 对于建议使用自动增量 id 而不是 created_at 的 Matthias S。
我建议您在服务器端跟踪 3 件事,因为您可以对多于一列进行排序。
列(例如:id/score)、最后一个值和排序顺序(asc/desc)。你的新电话看起来像这样
var page = host + "/load-more-comments/" + $submissionID + "/" + $column + "/" + $lastValue + "/" + $sort;
因此,您的新电话将如下所示:
public function loadMoreNewComments($submissionID, $skip, Request $request) {
$submission = Submission::findOrFail($submissionID);
if($request->ajax()) {
$comments = Comment::where('submission_id', $submission->id)
->orderBy($column, $sort)
->when(true, function($query) use ($column, $lastValue, $sort) {
if ($sort === 'desc') {
return $query->where($column, '<', $lastValue);
} else {
return $query->where($column, '>', $lastValue);
}
})
->take(10);
return [
'replies' => view('partials.comment_loop')->with('submission', $submission)->with('comments', $comments)->render(),
];
}
}
编辑:由于多个评论可以具有相同的分数,因此当您按分数排序时,您还必须保留所有 id 的数组,其中分数等于最后一个值。将此数组发送到服务器并使用类似于此的代码:
$comments = Comment::where('submission_id', $submission->id)
->orderBy($column, $sort)
->when($column === 'id', function($query) use ($lastValue, $sort) {
if ($sort === 'desc') {
return $query->where('id', '<', $lastValue);
} else {
return $query->where('id', '>', $lastValue);
}
})->when($column !== 'id', function($query) use ($column, $lastValue, $sort, $arrayOfIds) {
if ($sort === 'desc') {
return $query->where($column, '<=', $lastValue)->whereNotIn('id', $arrayOfIds);
} else {
return $query->where($column, '>=', $lastValue)->whereNotIn('id', $arrayOfIds);
}
})->take(10);
- 1 回答
- 0 关注
- 181 浏览
添加回答
举报