Laravel 5:如何用雄辩的语言使用“ where”或“ orderBy”?

时间:2018-11-14 19:05:57

标签: php laravel eloquent

首先,这不是Laravel 4: how to "order by" using Eloquent ORM的重复

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

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

@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')

但是我不知道该怎么做。

2 个答案:

答案 0 :(得分:6)

您可以这样做:

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

使用->idea()时,它将开始查询。

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

答案 1 :(得分:1)

您可以使用这样的where子句

DB::table('products_to_categories')
    ->where('categories_id', $id )
    ->update([
        'categories_id' => $unassigned_cat_id
    ]);

您可以像这样使用orderBy子句

DB::table('products_to_categories')
    ->where('categories_id', $id )
    ->orderBy('subId','DESC');