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_atupdated_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]);

异常处理

findOrFailfirstOrFail 方法用于处理未找到结果的情况。

$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();}

批量赋值

在模型中定义 fillableguarded 属性,控制批量赋值权限。

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 模型进行数据管理和操作。如果有任何问题或需要进一步的帮助,请随时联系。

上一篇:laravel 5.5 -- Eloquent 模型关联
下一篇:laravel 5.5 -- Cache

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年05月08日 20时54分16秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章