- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我问这个的原因是,在我当前的应用程序 withCount()
中,响应时间几乎是通过 with()
获取关系的所有数据的三倍并从前端(javascript)获取长度。我认为使用 withCount()
的目的是为了加快查询速度,但也许我错了?
例如:
courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->withCount('enrollments')
->get();
平均响应时间约为 900 毫秒(调试栏将其显示为单个数据库调用)
但是
courseSession::where('id', '>=', 1)
->where('id', '<=', 320)
->with('enrollments')
->get();
大约 350 毫秒(调试栏将其显示为两个不同的数据库调用)
模型关系定义如下:
public function enrollments()
{
return $this->hasMany(EmployeeEnrollment::class)->where('dropped', '=', null);
}
注意:已经检查过,如果我删除 where 子句,它只会加快 30 毫秒
员工登记表大约有 11k 行,我正在运行查询的模型表大约有 2k 行
这也在本地开发环境中,并在两台单独的机器上进行了测试
我对数据库的东西有点无能,所以我不确定我是否做错了什么......但是任何帮助都将不胜感激
最佳答案
不同之处在于您要求 mysql 计算语句中的每一行,而不是仅仅转储。 withCount 的意义不在于它更快,如果您只需要一个计数,它对内存的好处就更大。
例如,我与数以千计的数据丰富的项目有关系。如果我只是使用 with 然后尝试计算结果,php 将耗尽内存我永远有机会进行计数。如果我使用 withCount,只会返回一个项目,告诉我有多少项目,因此不会占用 php 内存,但所有工作都在 sql server 上完成。
关于php - Laravel Eloquent withCount() 应该比 with() 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47425371/
我有一个函数 allArticlesCount,它计算所有有 draft 1 的文章。 $allArticlesCount = Article::where('draft', 1)->count();
我有一个函数 allArticlesCount,它计算所有有 draft 1 的文章。 $allArticlesCount = Article::where('draft', 1)->count();
统计关联数量,单个用法 ? 1
我有多个 hasMany 关系,我只想要最后一个表的行数。 用户可以在特定日期和时间注册研讨会,因此关系看起来像“Workshop”-> hasMany 'Date' -> hasMany 'Time
如何在 withCount() 上运行子查询? 我有一个查询要针对多个计数运行,每个计数都有自己的子查询。 这是我正在寻找的东西的示例: $date_from = Carbon::parse('1/1
如何在 withCount() 上运行子查询? 我有一个查询要针对多个计数运行,每个计数都有自己的子查询。 这是我正在寻找的东西的示例: $date_from = Carbon::parse('1/1
我正在尝试对关系中的关系使用 withCount()。我收到的错误是 Method Illuminate\Database\Query\Builder::forums.threads does not
我有以下模型: 问题:[title, user_id] 回复:[body, question_id, user_id] 用户:[姓名] 如你所见,一个问题有很多回复,一个回复属于一个用户。 我已将贡献
我有一个表,其中有一列 is_up_vote = true|false 我正在尝试使用 withCount() 编写一个查询,以便它返回真值和假值的总和。 从 comment_votes 中选择 CO
我正在寻找 Eloquent 或原始 sql 来获取我的两个 ->withCount 的总和。我需要能够做到这一点 而无需 必须 ->get() 记录,它需要使用 Eloquent 来实现,而不是 l
我需要计算来自相同关系的两个不同条件的结果,但它以相同的名称返回。 Model::where('types_id', $specialism_id) ->withCount(['req
我正在尝试在 Eloquent withCount() 方法中使用父关系的枢轴变量。 背景: 有一个在用户和集群之间具有多对多关系的应用程序。用户可以在集群内发送消息。为了跟踪特定集群中用户的未读消息
我有 3 个模型:Vehicle、Dealer 和 Province Eloquent关系如下: Vehicle belongsTo Dealer Dealer hasMany Vehicles Pr
我希望 withCount 包含不存在关系的计数。 例如,假设我有一个名为 people 的表和一个名为 pets 的表。 people 有许多 pets,但 pets 可以有一个 null peop
我有一个users型号和 comments现在我要选择users关系超过100 comments为此,我正在这样做: $users = User::withCount('comments')->hav
所以我问这个的原因是,在我当前的应用程序 withCount() 中,响应时间几乎是通过 with() 获取关系的所有数据的三倍并从前端(javascript)获取长度。我认为使用 withCount
我正在尝试使用这段代码在 laravel 的 Eloquent 查询构建器的 withCount 方法上做一个 where 子句。 $posts = Post::withCount('upvotes'
模型结构如下 教程 -> (hasMany) 章节 -> (hasMany) 视频 我们如何使用 laravel 5.3 的 withCount() 方法从教程模型加载视频数 (video_count
使用 Laravel/Lumen eloquent 我可以得到这样的计数关系: User::withCount('views')->get(); 这将使用 SQL select `users`.*,
我有一个 酒店模型有很多 客房可以是 已占用 .我应该如何查询: 酒店列表 房间数 占用房间数 查询: $hotels = Hotel::where('foo',$bar) ->withCount('
我是一名优秀的程序员,十分优秀!