laravel 基础面试题-偏交谈-2020-12-10-主讲laravel查询相关
感谢关注本人公众号: 上海 PHP 自学中心
qq群(3年2万):517085546
1. 你对 Laravel 中的查询生成器了解多少?
Laravel 的数据库查询构建器为创建和运行数据库查询提供了方便,流畅的接口。它可以用于在应用程序中执行大多数数据库操作,并且可以在所有支持的数据库系统上工作。
Laravel 查询构建器使用 PDO 参数绑定来保护应用程序免受 SQL 注入攻击。无需清除作为绑定传递的字符串。
查询生成器的一些功能:
- 分块
- 聚合
- Selects
- 原生方法
- Joins
- Unions
- Where 语句
- Ordering,Grouping,Limit,& Offset
2. Eager Loading 有什么好处,何时使用?
当访问 Eloquent 关系作为属性时,关系数据是 “Lazy Loaded” 的。这意味着直到您首次访问该属性,关系数据才被实际加载。但是,Eloquent 可以在查询父模型时 “Eager Load” 关系。
当我们有嵌套对象时 (例如书本 -> 作者),Eager Loading 减轻了 N + 1 查询的问题。我们可以使用 Eager Loading 将此操作减少为仅 2 个查询。
3. 本地作用域有何用?
Scopes 允许您轻松地在模型中复用查询逻辑。要定义 scope,只需在模型方法的前面加上 scope:
class User extends Model {
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}
public function scopeWomen($query)
{
return $query->whereGender('W');
}
}
用法:
$users = User::popular()->women()->orderBy('created_at')->get();
有时您可能希望定义一个接受参数的 scope。Dynamic scopes 接受查询参数:
class User extends Model {
public function scopeOfType($query, $type)
{
return $query->whereType($type);
}
}
用法:
$users = User::ofType('member')->get();
PS: 如果全局使用,则需要注册到boot中。
scope全局使用参考链接:博客:Laravel 模型的 scope 普通用法和全局用法
防爬虫说明
禁止 学习某地爬虫,知乎爬虫,CSDN 爬虫。
本文,首发在 learnku 社区。
@author
汪春波(www.shxdledu.cn)