加载更多雄辩的有很多关系查询通过 ajax 在 Laravel 中?



在我的网站上,用户可以发布"状态",其他用户可以回复/评论这些状态。例如,在我的网站的首页上,我显示了过去 3 天最喜欢的状态。

在我的家庭控制器中.php

$statuses = Status::where('is_image', 1)
->where('is_mature', 0)
->where('created_at', '>=', Carbon::now()->subHours(168))
->orderBy('like_count', 'desc')
->take(6)
->get();

状态也可以有回复。答复使用与状态表相同的表。回复几乎只是具有"父"状态的状态,而常规状态只是没有"父"状态的状态。

从模型状态.php

public function scopeNotReply($query) {
return $query->whereNull('parent_id');
}
public function replies() {
return $this->hasMany('CommendMeModelsStatus', 'parent_id');
}

所以回到我的主页,以下是在主页上加载状态的方式:

首页刀片.php

@if ($statuses->count())
@foreach ($statuses as $status)
<div class="post-container">
...
blah blah blah
...
@foreach ($status->replies->reverse()->slice(0, 3) as $reply)
<div class="status-reply-content">
...
blah blah blah
...
</div>
@endforeach
@if (count($status->replies) > 3)
<a href="#">
View More Comments ({{ count($status->replies) }})
</a>
@endif
</div>
@endforeach
@endif

我想要的是"查看更多评论"按钮加载另一组 3 条评论。

如果对这些内容进行分页,这将很简单。事实上,在我的网站的其他地方,我通过ajax加载了更多的图像。这样:

if($request->ajax()) {
return [
'images' => view('browse.partials.fullview_partial')->with('images', $images->appends(request()->only('query')))->render(),
'next_page' => $images->nextPageUrl()
];
}       

但是,这依赖于通过 Ajax 加载下一组分页。而$status->replies关系没有被分页。

那么在这种情况下如何加载更多回复呢?

编辑:

即使是替代解决方案也会有所帮助。

是否需要在服务器端加载回复的第一页?我想既然你愿意用AJAX加载后续页面,你可以处理所有客户端,只有一个提供数据的AJAX端点。

只需通过状态 ID 和页码对终结点进行 ajax 调用即可。

// AjaxController
public function replies()
{
$status = Status::findOrFail(request('id'));
return $status->replies()->paginate(3);
}

(页码将自动解析。

这将返回分页器的 JSON 表示形式,其中包含上一页和下一页的 url 以及当前页面的数据。然后只需在客户端呈现数据。

我最终所做的只是在我的控制器中为请求本身创建一个新功能,然后发送状态的 ID,以及跳过计数(根据已加载的回复数量增加(以跳过加载的回复。

public function getReplies($statusID, $skip, Request $request) {
$status = Status::findOrFail($statusID);
$replies = $status->replies()->orderBy('created_at', 'desc')->skip($skip)->take(10)->get();
if($request->ajax()) {
return [
'replies' => view('templates.partials.replies')->with('replies', $replies)->render(),
];
}   
}

相关内容

  • 没有找到相关文章

最新更新