
laravel 5.5 -- Eloquent 入门
发布日期:2025-04-04 02:06:17
浏览次数:11
分类:精选文章
本文共 3446 字,大约阅读时间需要 11 分钟。
Eloquent 模型入门与操作指南
Eloquent 是 Laravel 官方的 ORM(对象关系映射工具),它使操作数据库变得更加简单高效。在本指南中,我们将详细介绍如何使用 Eloquent 模型进行模型定义、数据查询以及数据操作等常用功能。
1. 模型创建
使用 php artisan make:model
命令创建一个新模型。例如:
php artisan make:model User --migration
或者如果只需要生成迁移文件:
php artisan make:model User -m
接下来,我们可以在模型中定义表名、主键、时间戳格式等属性。例如:
注意事项:
table
属性定义模型关联的数据库表名,默认为flights
。primaryKey
属性定义模型的主键字段名,默认为id
。timestamps
属性控制是否自动维护created_at
和updated_at
字段。
2. 模型查询
Eloquent 提供了丰富的查询方法,允许你根据需求灵活查询数据。
基本查询
// 获取所有模型实例$flights = App\Flight::all();// 条件查询$flights = App\Flight::where('active', 1) ->orderBy('name', 'desc') ->take(10) ->get();
集合操作
- 使用
reject()
过滤数据。 - 使用
chunk()
分批处理数据。
$flights = $flights->reject(function ($flight) { return $flight->cancelled;});Flight::chunk(200, function ($flights) { foreach ($flights as $flight) { // ... });});
查询优化
- 使用
cursor()
方法一次性获取大量数据。 - 使用
find()
和firstOrCreate()
获取单个模型或集合。
foreach (Flight::where('foo', 'bar')->cursor() as $flight) { // ...}// 获取单个模型或集合$flight = App\Flight::find(1);$flight = App\Flight::where('active', 1)->first();$flights = App\Flight::find([1, 2, 3]);
异常处理
findOrFail
和 firstOrFail
方法用于处理未找到结果的情况。
$model = App\Flight::findOrFail(1);$model = App\Flight::where('legs', '>', 100)->firstOrFail();
3. 数据操作
添加和更新
在控制器中定义存储方法:
public function store(Request $request) { // 验证请求... $flight = new Flight; $flight->name = $request->name; $flight->save();}
批量赋值
在模型中定义 fillable
或 guarded
属性,控制批量赋值权限。
protected $fillable = ['name'];$flight = App\Flight::create(['name' => 'Flight 10']);// 已有实例时使用$flight->fill(['name' => 'Flight 22']);
firstOrNew、firstOrCreate、updateOrCreate
这些方法结合查询和保存操作。
$flight = App\Flight::firstOrCreate(['name' => 'Flight 10']);$flight = App\Flight::firstOrNew(['name' => 'Flight 10']);$flight = App\Flight::updateOrCreate( ['departure' => 'Oakland', 'destination' => 'San Diego'], ['price' => 99]);
4. 删除操作
删除单个或多个模型
$flight = App\Flight::find(1);$flight->delete();// 批量删除App\Flight::destroy([1, 2, 3]);// 直接删除$deletedRows = App\Flight::where('active', 0)->delete();
软删除
在模型中使用 SoftDeletes
trait。
use Illuminate\Database\Eloquent\SoftDeletes;class Flight extends Model{ use SoftDeletes; protected $dates = ['deleted_at'];}
软删除不会物理删除数据,而是仅通过逻辑标记处理。
5. 全局和本地作用域
全局作用域
在 Scopes
文件夹中创建自定义作用域。
namespace App\Scopes;use Illuminate\Database\Eloquent\Scope;use Illuminate\Database\Eloquent\Builder;class AgeScope implements Scope{ public function apply(Builder $builder, Model $model) { return $builder->where('age', '>', 200); }}
在模型中启用作用域:
use App\Scopes\AgeScope;class User extends Model{ static function boot() { parent::boot(); static::addGlobalScope(new AgeScope); }}
本地作用域
在模型中定义自己的作用域方法。
public function scopePopular($query) { return $query->where('votes', '>', 100);}public function scopeActive($query) { return $query->where('active', 1);}
使用这些作用域:
$users = App\User::popular()->active()->orderBy('created_at')->get();
动态范围过滤
public function scopeOfType($query, $type) { return $query->where('type', $type);}$users = App\User::ofType('admin')->get();
6. 事件
Eloquent 提供了丰富的事件,如 created
, saving
, deleted
等,可以用来触发自定义逻辑。
flight = $flight; }}
在服务提供者中注册事件:
TosUpdateService::class, ]; public function boot() { parent::boot(); foreach ($this->events as $event => $handler) { event($event, $handler); } }}
通过以上方法,你可以高效地使用 Eloquent 模型进行数据管理和操作。如果有任何问题或需要进一步的帮助,请随时联系。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月08日 20时54分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java基础学习总结(47)——JAVA输入输出流再回忆
2025-04-02
Java基础学习总结(4)——对象转型
2025-04-02
Java基础学习总结(4)——对象转型
2025-04-02
Java基础学习总结(51)——JAVA分层理解
2025-04-02
Java基础学习总结(53)——HTTPS 理论详解与实践
2025-04-02
Java基础学习总结(54)——JSON和Map转换的工具类
2025-04-02
Java基础学习总结(56)——学Java必知十大学习目标
2025-04-02
Java基础学习总结(57)——Jrebel插件热部署
2025-04-02
Java基础学习总结(59)——30 个java编程技巧
2025-04-02
Java类实现一个类的障眼法
2025-04-02
Java基础学习总结(5)——多态
2025-04-02
Java基础学习总结(63)——Java集合总结
2025-04-02
Java基础学习总结(64)——Java内存管理
2025-04-02
Java基础学习总结(66)——配置管理库typesafe.config教程
2025-04-02
Java基础学习总结(67)——Java接口API中使用数组的缺陷
2025-04-02
Java基础学习总结(70)——开发Java项目常用的工具汇总
2025-04-02
Java基础学习总结(73)——Java最新面试题汇总
2025-04-02
Java基础学习总结(75)——Java反射机制及应用场景
2025-04-02
Java基础学习总结(76)——Java异常深入学习研究
2025-04-02