在本文中,我们将介绍 Laravel Web 框架中 Eloquent ORM 的修改器和访问器。介绍完毕后,我们将通过一些示例来理解这些概念。
在 Laravel 中,修改器和访问器允许您在将数据保存到数据库或从数据库中获取数据之前更改数据。具体来说,变异器允许您在将数据保存到数据库之前更改数据。另一方面,访问器允许您在从数据库获取数据后更改数据。
事实上,Laravel 模型是您可以创建修改器和访问器方法的中心位置。当然,将所有修改放在一个地方而不是分散在不同的地方是件好事。
在模型类中创建访问器和修改器
既然您现在已经熟悉了修改器和访问器的基本概念,我们将继续开发一个实际示例来演示它。
我假设您了解 Laravel 中的 Eloquent 模型,我们将使用 Post
模型作为示例的起点。如果您还没有创建 Post
模型,让我们使用 artisan
命令来创建它。
php artisan make:model Post --migration
这应该在 app/Post.php 中创建一个模型文件,如下所示。
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { // }
让我们用以下内容替换该文件的内容。
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Casts\Attribute; class Post extends Model { /** * Interact with the user's name attribute. * * @param string $value * @return \Illuminate\Database\Eloquent\Casts\Attribute */ protected function name(): Attribute { return Attribute::make( get: fn ($value) => 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
属性的值后,将调用
ucfirst
方法来更改帖子标题。到目前为止,我们刚刚创建了赋值器和访问器方法,但我们将在接下来的部分中测试它们。
变异器的作用
让我们在 app/Http/Controllers/MutatorController.php
创建一个控制器,以便我们可以测试我们在前面部分中创建的 mutator 方法。
<?php // app/Http/Controllers/MutatorController.php namespace App\Http\Controllers; use App\Post; use App\Http\Controllers\Controller; class MutatorController extends Controller { public function index() { // create a new post object $post = new Post; $post->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
:
<?php namespace App\Http\Controllers; use App\Post; use App\Http\Controllers\Controller; class AccessorController extends Controller { public function index() { // load post $post = Post::find(1); // check the name property, it should be output of the ucfirst function echo $post->name; exit; } }同样,您需要在 routes/web.php 文件中使用关联的路由来访问访问器控制器。
Route::get('accessor/index', 'AccessorController@index');
index
方法中,我们首先使用 Post
在 模型来加载示例帖子。
name
接下来,我们检查
这就是 Eloquent 变异器和访问器的工作原理!🎜
结论
今天,我们探讨了 Laravel 中 Eloquent ORM 的修改器和访问器的概念。它提供了一种在将数据保存到数据库和从数据库中提取数据之前更改数据的好方法。
对于那些刚刚开始使用 Laravel 或希望通过扩展来扩展您的知识、网站或应用程序的人,我们在 Envato Market 上提供了多种可供您学习的内容。
以上是Laravel中的优雅访问器和修改器的详细内容。更多信息请关注PHP中文网其他相关文章!

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

PHP和Python都是高层次的编程语言,广泛应用于Web开发、数据处理和自动化任务。1.PHP常用于构建动态网站和内容管理系统,而Python常用于构建Web框架和数据科学。2.PHP使用echo输出内容,Python使用print。3.两者都支持面向对象编程,但语法和关键字不同。4.PHP支持弱类型转换,Python则更严格。5.PHP性能优化包括使用OPcache和异步编程,Python则使用cProfile和异步编程。

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Dreamweaver CS6
视觉化网页开发工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

禅工作室 13.0.1
功能强大的PHP集成开发环境