
在本文中,我们将介绍 Laravel Web 框架中 Eloquent ORM 的修改器和访问器。介绍完毕后,我们将通过一些示例来理解这些概念。
在 Laravel 中,修改器和访问器允许您在将数据保存到数据库或从数据库中获取数据之前更改数据。具体来说,变异器允许您在将数据保存到数据库之前更改数据。另一方面,访问器允许您在从数据库获取数据后更改数据。
事实上,Laravel 模型是您可以创建修改器和访问器方法的中心位置。当然,将所有修改放在一个地方而不是分散在不同的地方是件好事。
在模型类中创建访问器和修改器
既然您现在已经熟悉了修改器和访问器的基本概念,我们将继续开发一个实际示例来演示它。
我假设您了解 Laravel 中的 Eloquent 模型,我们将使用 Post 模型作为示例的起点。如果您还没有创建 Post 模型,让我们使用 artisan 命令来创建它。
php artisan make:model Post --migration
这应该在 app/Post.php 中创建一个模型文件,如下所示。
让我们用以下内容替换该文件的内容。
ucfirst($value), set: fn ($value) => strtolower($value), ); } }由于我们使用了
--migration选项,它还应该创建关联的数据库迁移。以防万一您不知道,您可以运行以下命令,以便它实际在数据库中创建表。php artisan migrate为了运行本文中的示例,您需要在
post表中创建name列。无论如何,我们不会详细讨论迁移的细节,因为这超出了本文的范围。Mutator 方法
首先,我们来看看 mutator 方法。
protected function name(): Attribute { return Attribute::make( #get: fn ($value) => ucfirst($value), set: fn ($value) => strtolower($value), ); }正如我们之前讨论的,修改器用于在将数据保存到数据库之前更改数据。如您所见,mutator 方法的语法为
{attribute-name}。当然,您需要将{attribute-name}替换为驼峰大小写的实际属性名称。需要注意的是,所有访问器和修改器方法都会返回一个Attribute实例,该实例定义如何访问和修改属性。在属性上调用 mutator 方法时,将使用
set参数。为了简单起见,我们只使用了strtolower函数,该函数在将帖子标题保存到数据库之前将其转换为小写。通过这种方式,您可以在表的所有列上创建变异方法。接下来,我们来看看访问器方法。
访问器方法
如果在将数据保存到数据库之前使用变元来更改数据,则访问器方法用于在从数据库获取数据后更改数据。要定义访问器方法,您需要在定义属性时提供
get参数。
DM建站系统汽车保养维修HTML5网站模板1.5下载DM建站系统汽车保养维修HTML5网站模板,DM企业建站系统。是由php+mysql开发的一套专门用于中小企业网站建设的开源cms。DM系统的理念就是组装,把模板和区块组装起来,产生不同的网站效果。可以用来快速建设一个响应式的企业网站( PC,手机,微信都可以访问)。后台操作简单,维护方便。DM企业建站系统安装步骤:第一步,先用phpmyadmin导入sql文件。 第二步:把文件放到你的本地服务器
让我们看一下访问器方法。
protected function name(): Attribute { return Attribute::make( get: fn ($value) => ucfirst($value), #set: fn ($value) => strtolower($value), ); }从数据库获取
name属性的值后,将调用get参数。在我们的例子中,我们刚刚使用ucfirst方法来更改帖子标题。到目前为止,我们刚刚创建了赋值器和访问器方法,但我们将在接下来的部分中测试它们。
变异器的作用
让我们在 app/Http/Controllers/MutatorController.php 创建一个控制器,以便我们可以测试我们在前面部分中创建的 mutator 方法。
name = 'Post Title'; $post->save(); } }此外,您还需要在 routes/web.php 文件中创建关联的路由才能访问 mutator 控制器。
Route::get('mutator/index', 'MutatorController@index');在
index方法中,我们使用Post模型创建一个新帖子。它应该将name列的值设置为post title值,因为我们在相应的 mutator 方法中使用了strtolower函数。操作中的访问器
要查看操作中的访问器,让我们继续创建一个包含以下内容的控制器文件 app/Http/Controllers/AccessorController.php:
name; exit; } }同样,您需要在 routes/web.php 文件中使用关联的路由来访问访问器控制器。
Route::get('accessor/index', 'AccessorController@index');在
index方法中,我们首先使用Post模型来加载示例帖子。接下来,我们检查
name列的值,它应该以大写字母开头,因为我们已经为该列定义了访问器方法。这就是 Eloquent 变异器和访问器的工作原理!
结论
今天,我们探讨了 Laravel 中 Eloquent ORM 的修改器和访问器的概念。它提供了一种在将数据保存到数据库和从数据库中提取数据之前更改数据的好方法。
对于那些刚刚开始使用 Laravel 或希望通过扩展来扩展您的知识、网站或应用程序的人,我们在 Envato Market 上提供了多种可供您学习的内容。










