首页 > 解决方案 > Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?

问题描述

首先,这不是Laravel 4 的副本:如何使用 Eloquent ORM “排序”

我有这个模型用户,然后我有另一个模型想法。我正在写一个包含用户详细信息的视图,并且我想发布用户提出的所有想法。现在,想法有一个状态,第一个状态是“草稿”,这意味着只有发布想法的用户才能查看它,该想法不应该显示给查看个人资料的其他用户。

使用 eloquent 我可以做类似的事情:

@foreach($user->idea as $idea)
    ...display details...
@endforeach

我的问题是,这种方法会循环遍历所有想法,并按照它们被引入的顺序。我可以添加一个@if以仅显示我想要的内容,例如

@foreach($user->idea as $idea)
    @if($idea->status !='DRAFT')
        ...show the idea...
    @endif
@endforeach

但我认为这不是明智的做法,我想做类似的事情

$ideas = $user->idea->where('status', '<>', 'DRAFT')

然后循环遍历$ideas变量,或者至少,我想要一些喜欢

$ideas = $user->idea->orderBy('created_at', 'desc')

但我不知道该怎么做。

标签: phplaraveleloquent

解决方案


你可以这样做:

$ideas = $user->idea()
    ->where('status', '<>', 'DRAFT')
    ->orderBy('created_at', 'desc')
    ->get();

当您使用->idea()它时,它将启动一个查询。

有关如何查询关系的更多信息:https ://laravel.com/docs/5.7/eloquent-relationships#querying-relations


推荐阅读