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

Posted

技术标签:

【中文标题】Laravel 5:如何使用 \'where\' 或 \'orderBy\' 使用 eloquent?【英文标题】:Laravel 5: How to use 'where' or 'orderBy' using eloquent?Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent? 【发布时间】:2019-04-17 19:54:23 【问题描述】:

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

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

使用 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')

但我不知道该怎么做。

【问题讨论】:

【参考方案1】:

你可以这样做:

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

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

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

【讨论】:

非常感谢!我错过了第一个()和get()。呵呵! @luisfer 没问题!祝你今天过得愉快。 :)【参考方案2】:

你可以像这样使用 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');

【讨论】:

谢谢!我不想使用查询生成器,但这也很完美,谢谢!

以上是关于Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用where关键字检查Laravel 5.2路由中的状态参数?

如何在 Laravel 中 MySQL 查询的 where 子句中使用数组 [重复]

在laravel 5.4中调用一个成员函数where()on float

如何在laravel 5.2(where condition)中调用all()方法

如何修复Laravel 5.2中的“Undefined variable:subtask”

laravel 5.8中的多个Where条件不起作用