dev*_*234 2 php mysql laravel eloquent laravel-5
我看到联接是(默认情况下是内部联接),它返回所有列,但与关键字的时间几乎相同,仅包含1000个数据。
$ user-> join('profiles','users.id','=','profiles.user_id')-生成以下查询。
select * from `users` inner join `profiles` on `users`.`id` = `profiles`.`user_id` where `first_name` LIKE '%a%'`
Run Code Online (Sandbox Code Playgroud)
User :: with('profile')-这个热切的加载输出以下查询
select * from `users` where exists (select * from `profiles` where `users`.`id` = `profiles`.`user_id` and `first_name` LIKE '%a%')
Run Code Online (Sandbox Code Playgroud)
最好的方法是返回带有REST API分页的用户列表?渴望加载似乎很有希望,但是它带有子查询。
如果做急切的加载,这就是我将如何过滤。需要在哪里使用
if($request->filled('first_name')){
$query->whereHas('profile',function($q) use ($request){
$q->where('first_name','like','%'.request('first_name').'%');
});
}
Run Code Online (Sandbox Code Playgroud)
但如果使用Join,则其代码行更少。
if ($request->filled('first_name')) {
$users = $users->where('first_name', 'LIKE', "%$request->first_name%");
}
Run Code Online (Sandbox Code Playgroud)
laravel版本是5.7
雄辩的是Laravel的Active Record模式的实现,它具有所有优点和缺点。当您以CRUD方式处理单个实体时,即从数据库中读取或创建一个新实体,然后保存或删除它,这是一个很好的解决方案。您将从Eloquent的功能中受益匪浅,例如脏检查(仅针对已更改的字段发送SQL UPDATE),模型事件(例如,在有人创建新帐户时发送管理警报或更新统计信息计数器),特征(时间戳,软删除,自定义特征)渴望/延迟加载等。
但是,您已经知道,它带有一些性能价格。当您处理一个或几个记录时,无需担心。但是对于读取大量记录的情况(例如,用于数据网格,用于报告,用于批处理等),纯DB是更好的方法。
对于我们的应用程序,我们正是这样做的-在Web窗体中使用Laravel的Eloquent处理单个记录,并使用DB(带有SQL视图)检索网格数据,导出等。
在性能和应用程序增长方面,为了进行比较,请在下表中进行掠夺:
口才ORM和原始SQL之间的选择操作平均响应时间比较
雄辩的ORM平均响应时间
Joins | Average (ms)
1 | 162,2
3 | 1002,7
4 | 1540,0
Run Code Online (Sandbox Code Playgroud)
口才ORM的选择操作平均响应时间的结果
原始SQL平均响应时间
Joins | Average (ms)
1 | 116,4
3 | 130,6
4 | 155,2
Run Code Online (Sandbox Code Playgroud)
Raw SQL的选择操作平均响应时间的结果
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |