Laravel:orderBy喜欢计数

Posted

技术标签:

【中文标题】Laravel:orderBy喜欢计数【英文标题】:Laravel: orderBy like count 【发布时间】:2018-10-04 00:01:52 【问题描述】:

在我的网站上,注册用户可以创建帖子并喜欢其他人的帖子。当显示所有帖子时,我有选项,用户可以按标题、日期和喜欢计数排序。我已经完成了标题和日期,但我无法按喜欢计数排序。在我的系统中实现此功能的最佳方式是什么。

这是我用于检索和排序帖子的帖子控制器方法:

public function getEvents(Request $request)

    if($request['sort'] == "created_at")
        $posts = Post::orderBy('created_at', 'desc')->get();
    
    elseif($request['sort'] == "title")
        $posts = Post::orderBy('title', 'desc')->get();
    
    elseif($request['sort'] == "like")

        //how would I go about ordering by like count here
    
    return view ('eventspage',  ['posts' => $posts]);

这是我的观点,用户可以选择订购什么:

<form action=" route('events') ">    
    <select name="sort" onchange="this.form.submit()" class="form-control">
        <option value="">Sort By</option>
        <option value="created_at">Date</option>
        <option value="title">Title</option>
        <option value="like">Likes</option>
        <input type="hidden" name="formName" value="sort">
    </select>
</form>

【问题讨论】:

您目前如何跟踪likes?每个like 是否在另一个表中获得记录?您在此表上是否有类似 num_ikes 的列? 每个赞都会在赞表中获得一条记录。 likes 表包含 id、Post_id(外键)和 user_id(外键)@PatrickMoore 【参考方案1】:

使用这个:

$posts = Post::withCount('likes')->orderByDesc('likes_count')->get();

这需要Post 模型中的likes 关系:

public function likes() 
    return $this->hasMany(Like::class);

【讨论】:

只要 OP 有关系就可以工作,很好!

以上是关于Laravel:orderBy喜欢计数的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 orderBy与ofCount的关系导致SQL错误,因为尝试获取列而不是计数失败

laravel:当计数达到给定值时如何从 foreach 循环中删除选定的数据

具有依赖项计数的 Laravel 查询构建器

Laravel 核心--Facades 门面

我想自学laraver,请诸位前辈给一些建议,谢谢

larave学习笔记1-安装配置