我试图理解一些高级的雄辩命令,在Laravel官方文档中,没有太多关于雄辩或Wherehas方法的内容,也没有关于它如何工作的示例
https://laravel.com/docs/8.x/eloquent-relationships#querying-关系存在
有人能帮我理解一下吗?还有一个简单的例子。
比如说有一个类似博客的应用程序。应用程序的主要实体/模型是Post(博客文章)。
当任何作者撰写和发表文章时,
我们这里有3个模型
现在让我们假设出于某种原因,我们想要从数据库中获取所有Post记录,这些记录要么在当前月份有10条或更多的评论,要么在当前月份有3条或更多的赞
我们可以写一个查询比如
php prettyprint-override">$posts = Post::whereHas('comments', function($query) {
$query->where('created_at', '>', now()->startOfMonth();
}, '>=', 10)
->orWhereHas('likes', function($query){
$query->where('created_at', '> ', now()->startOfMonth();
}, '>=', 3)
->get();
Laravel文件:https://laravel.com/docs/8.x/eloquent-relationships#querying-关系存在
就像where
一样,whereHas
和orWhereHas
都接受闭包作为第二个参数,以实现更细粒度的查询控制。
实际上,当您希望对约束有更多的能力时,应该使用where
。
如果您只想检查是否存在关系记录,您可以使用has
进行以下操作:
获取所有有评论或类似评论的帖子记录,每页分页20页
$postsWithCommentsOrLikes = Post::has('comments')
->orHas('likes')
->paginate(20);
如何使用它:只是链作为任何其他雄辩
方法
User::whereHas(...)->orWhereHas(...)->get();
何时使用:假设您有用户
,帖子
和评论
,每个用户都可以写帖子和评论。然后你需要获得活跃的用户。例如,您假设活动用户在过去7天内发表了帖子或评论。因此,您可以通过以下方式获得:
$users = App\Models\User::query()
->whereHas('posts', function (Builder $query) {
$query->where('created_at', '>=', Carbon::now()->subDays(7));
})
->orWhereHas('comments', function (Builder $query) {
$query->where('created_at', '>=', Carbon::now()->subDays(7));
})
->get();
我的客户通过订单订购了许多包裹。 我想退回包裹数量超过0且状态仅为成功的客户。但我不知道如何添加包裹状态的条件。目前,这份声明给了我一份有包裹的客户名单<代码>$customers=Customer::has('包裹','
如何将以下查询转换为Laravel4雄辩ORM?
我正在努力使用laravel函数 我的代码在这里: 存储时:公司存储良好,但对于公司人员,它将存储到 Larave Documentations说: 有时,您可能不仅希望保存模型,还希望保存其所有关系。为此,您可以使用推送方法: 怎么了?
问题内容: 我是Angular 4的新手,所以谁能解释在Angular 4中的使用方式和位置? 实际上,我想从父组件覆盖子组件的某些CSS属性。此外,它在IE11上受支持吗? 问题答案: 通常, 可使用组合器将样式强制降低到 。这个选择器有一个别名>>>,现在还有另一个叫做:: ng-deep的别名。 由于 已弃用,建议使用 例如: 和 它将应用于子组件
问题内容: 我正在阅读一些有关Java中异常处理的内容,以便能够编写更好的代码。好吧,我承认,我有罪。我使用了太多try-catch {}块,在捕获中使用了它,甚至没有使用适当的记录器(实际上是和被重定向到,因此生成了日志)。但是,经过几个小时的阅读,我发现自己在一个陌生的地方:未知。如果异常被设计为传递有关异常流状态的信息,那么人们如何知道WHERE是使用该信息执行操作的适当级别? 例如,当发生
始终使用Laravel Elotent而不是原始SQL有什么好处吗? 我有一个习惯,首先在phpMyAdmin中编写SQL来检查关系,然后将其翻译成雄辩的ORM。 有时,翻译成雄辩的ORM是痛苦和耗时的,尤其是从长而复杂的SQL查询进行翻译。与使用雄辩的ORM相比,我能够用SQL快速编写。