Laravel 5:如何使用'where'或'orderBy'使用雄辩?

lui*_*fer 3 php laravel eloquent

首先,这不是Laravel 4的重复:如何使用Eloquent ORM"排序"

我有这个模型用户,然后我有这个其他模型的想法.我正在编写一个包含用户详细信息的视图,我想发布用户建议的所有想法.现在,这些想法都处于状态,第一个状态是"DRAFT",这意味着只有发布该想法的用户才能查看它,这个想法不应该显示给查看该配置文件的其他用户.

使用雄辩,我可以做类似的事情:

@foreach($user->idea as $idea)
    ...display details...
@endforeach
Run Code Online (Sandbox Code Playgroud)

我的问题是,这种方法会循环所有的想法,并按照它们的介绍顺序循环.我可以添加一个@if只显示我想要的东西,比如

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

但我不认为这是明智的做法,我想做点什么

$ideas = $user->idea->where('status', '<>', 'DRAFT')
Run Code Online (Sandbox Code Playgroud)

然后循环通过$ideas变量,或者至少,我喜欢像somtehing一样

$ideas = $user->idea->orderBy('created_at', 'desc')
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么做.

Chi*_*ung 6

你可以这样做:

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

使用->idea()它时会启动查询.

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