gpt4 book ai didi

php - 在 Laravel 中通过 ajax 加载更 Eloquent hasMany 关系查询?

转载 作者:可可西里 更新时间:2023-11-01 12:35:22 30 4
gpt4 key购买 nike

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

在我的 HomeController.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();

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

来自模型status.php:

public function scopeNotReply($query) {
return $query->whereNull('parent_id');
}

public function replies() {
return $this->hasMany('CommendMe\Models\Status', 'parent_id');
}

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

home.blade.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,以及当前页面的数据。然后只需在客户端呈现数据。

关于php - 在 Laravel 中通过 ajax 加载更 Eloquent hasMany 关系查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45048147/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com