Laravel Eloquent

2025年3月17日 | 阅读 7 分钟

在本主题中,我们将学习允许与数据库交互的 eloquent 模型。 每个数据库表都有其对应的模型,该模型提供与数据库的交互。 该模型允许您查询表中的数据。

模型在 app 目录中创建。 您也可以将模型放置在任何位置,这些位置可以根据 composer.json 文件自动加载。

我们可以使用以下命令创建模型

php artisan make:model Post

我们还可以使用数据库迁移生成模型

php artisan make:model Post -m

php artisan make:model Post -migration

创建模型的步骤

  • 当我们在 Git bash 窗口中输入上述命令时
Laravel Eloquent

上面的窗口显示名称为 'Post' 的模型已成功创建。

  • 模型 (Post) 在 app 目录中创建。
Laravel Eloquent

模型的结构

上面创建的模型类的结构如下所示

上面的代码显示了 Post 类扩展了 Illuminate\Database\Eloquent\Model

表名

在 laravel eloquent 中,我们不需要指定要用于 Post 模型的表名。 除非我们明确指定表名,否则类的复数名称将被视为表名。 例如,在上面的代码中,类的名称是 Post,它作用于表 posts。 您还可以使用模型类的 $table 属性指定自定义表,如下面的代码所示

在上面的代码中,$table 属性指定 Post 类正在使用 posts 表。

主键

Eloquent 模型认为每个表都有一个名为“id”的主键。 我们可以通过为 $primarykey 属性提供不同的名称来覆盖此约定。

默认情况下,在 eloquent 中,主键是一个自动递增的整数值。 如果我们要为主键提供非递增的值,那么我们必须将 $incrementing 属性设置为 'false'。

public $incrementing = false;

如果我们要为主键提供非整数值,那么我们必须为 $keyType 属性提供不同的值。

protected $keyType = 'string';

在上面,我们将字符串类型分配给主键。

读取数据

现在,我们将了解如何从数据库中检索数据。 让我们通过一个例子来理解。

  • 首先,我们需要在模型类中添加两个属性。

Post.php

  • 我们添加了用于从数据库中检索数据的路由。

web.php

在上面的代码中,我们使用 all() 方法从数据库中检索所有记录,然后我们应用 foreach 循环来检索数据库中所有可用行的 body 名称,如下所示。

在下面的屏幕截图中,我们可以看到 posts 表中提供了两条记录。

Laravel Eloquent

输出

当我们运行 url,localhost/firstproject/public/read 时,输出将是

Laravel Eloquent

如果我们想从数据库中检索特定记录,那么我们使用 find() 方法。

输出

运行 url,localhost/firstproject/public/find 以查看上述代码的输出。

Laravel Eloquent

读取具有约束的数据

  • 要检索单行,我们使用 first() 方法,如下所示

输出

Laravel Eloquent
  • 如果我们不需要检索整行,那么我们可以使用 value() 方法直接检索列的值。

输出

Laravel Eloquent

插入数据

现在,我们将看到如何在数据库中插入数据。 让我们看一下下面给出的示例

输出

在 Web 浏览器中运行 url,localhost/firstproject/public/insert。 执行 url 后,打开 phpmyadmin。

Laravel Eloquent

上面的输出表明数据已成功插入。

使用 save() 方法更新数据

我们还可以使用 save() 方法更新记录。 让我们通过一个例子来理解。

输出

Laravel Eloquent

上面的屏幕显示了在执行上述代码之前的数据库表。

当我们执行上面的代码时,数据会更新,如下面的屏幕所示。

Laravel Eloquent

批量赋值

要提供批量赋值,我们需要使用 create() 方法,并在模型类中提供 $fillable 属性。

让我们通过一个例子来理解。

  • 首先,创建路由,我们在闭包函数中添加了 create() 方法。 create() 方法基本上是添加一个新记录,并通过其参数提供值。 首先,创建路由,我们在闭包函数中添加了 create() 方法。 create() 方法基本上是添加一个新记录,并通过其参数提供值。
  • 要提供批量赋值,我们需要在模型类中添加 $fillable 属性,如下面的代码所示。

输出

运行 url,localhost/firstproject/public/create 以运行上面的代码。

Laravel Eloquent

现在,看看数据库。

Laravel Eloquent

上面突出显示的区域显示已成功创建新记录。

使用 Eloquent 更新数据

现在,我们将看到如何使用 eloquent 更新数据。 让我们通过一个例子来理解。

  • 首先,创建路由。

在上面的代码中,我们使用了模型类的 update() 方法。 我们正在更新 id 等于 1 的记录。

输出

Laravel Eloquent
Laravel Eloquent

删除数据

现在,我们将看到如何使用 Eloquent 删除数据。 我们直接实现 eloquent 模型类中可用的 delete() 方法。

删除数据有不同的方法。

  • 第一种方法是使用 find() 和 delete() 方法。

输出

Laravel Eloquent
Laravel Eloquent
  • 第二种方法是使用 destroy() 方法。

输出

Laravel Eloquent
Laravel Eloquent

如果我们想销毁多个行,

上面的代码正在销毁 id 为 3 和 4 的记录。

输出

Laravel Eloquent
Laravel Eloquent
  • 第三种方法是使用查询。

输出

Laravel Eloquent
Laravel Eloquent

软删除/放入回收站

还有另一种删除记录的方法是软删除。 当模型被软删除时,这意味着记录实际上并未从数据库中删除。 在软删除中,记录不会永久删除; 它们存储在回收站空间中。

让我们通过一个例子来理解如何进行软删除。

  • 首先,我们需要将 deleted_at 属性设置为模型类。
  • 现在,进行迁移以在 posts 表中添加 deleted_at 列。
Laravel Eloquent
  • 由于我们创建了名为 add_column_deleted_at 的迁移,因此其结构如下所示

laravel 包含一个名为 softDeletes() 的辅助方法,我们在上面的代码中使用了它。 softDeletes() 方法用于创建列。

  • 现在,运行命令 php artisan migrate
Laravel Eloquent
  • 最后,在 web.php 文件中添加路由以运行软删除。

在上面的代码中,我们正在软删除 id 为 '1' 的记录。

输出

Laravel Eloquent
Laravel Eloquent

在上面的屏幕中,deleted_at 列显示了此记录被软删除的时间。 如果此列包含空值,则表示此记录未被软删除。

检索已删除/已放入回收站的数据

要检索已删除的数据,我们使用 withTrashed() 方法。 让我们通过一个例子来理解这一点。

在上面,我们正在检索已放入回收站或软删除的记录。

输出

Laravel Eloquent

恢复已删除/已放入回收站的数据

在上一主题中,我们了解了如何从软删除模型中检索数据。 现在,我们将看到如何将数据从回收站空间恢复到原始位置。 让我们通过一个例子来理解这一点。

在上面的代码中,我们正在使用 restore() 函数恢复已放入回收站的数据。

输出

Laravel Eloquent
Laravel Eloquent

上面的屏幕显示 deleted_at 列的值为 NULL,这意味着该记录已恢复到数据库中。

永久删除记录

有时我们需要永久删除数据。 要永久删除软删除模型,我们使用 forceDelete() 方法。 让我们通过一个例子来理解这一点。

在上面的代码中,我们正在删除已放入回收站的数据。

在执行上述代码之前,放入回收站的记录的 id 等于 1,如下面的屏幕截图所示。

Laravel Eloquent

当我们运行上面的代码时,放入回收站的记录将被删除,并且该表将如下所示

Laravel Eloquent
下一主题Laravel 关系