在本文中,我们将介绍 Laravel Web 框架中 Eloquent ORM 的修改器和访问器。介绍完毕后,我们将通过一些示例来理解这些概念。
在 Laravel 中,修改器和访问器允许您在将数据保存到数据库或从数据库中获取数据之前更改数据。具体来说,变异器允许您在将数据保存到数据库之前更改数据。另一方面,访问器允许您在从数据库获取数据后更改数据。
事实上,Laravel 模型是您可以创建修改器和访问器方法的中心位置。当然,将所有修改放在一个地方而不是分散在不同的地方是件好事。
在模型类中创建访问器和修改器
既然您现在已经熟悉了修改器和访问器的基本概念,我们将继续开发一个实际示例来演示它。
我假设您了解 Laravel 中的 Eloquent 模型,我们将使用 Post 模型作为示例的起点。如果您还没有创建 Post 模型,让我们使用 artisan 命令来创建它。
php artisan make:model Post --migration
登录后复制
这应该在 app/Post.php 中创建一个模型文件,如下所示。
<?php namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model{ //}
登录后复制
让我们用以下内容替换该文件的内容。
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 参数。
让我们看一下访问器方法。
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 上提供了多种可供您学习的内容。
以上就是Laravel中的优雅访问器和修改器的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1702853.html