Laravel:orderBy喜欢count

时间:2018-04-23 20:39:08

标签: php html laravel eloquent

因此,在我的网站上,注册用户可以创建帖子和其他人的帖子一样。当显示所有帖子时,我有选项,用户可以按标题,日期和类似计数进行排序。我已经完成了标题和日期,但我很难按照计数排序。将此功能应用到我的系统中的最佳方法是什么。

这是我的帖子控制器方法,用于检索和订购帖子:

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>

1 个答案:

答案 0 :(得分:4)

使用此:

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

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

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