在本文中,我们将介绍 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 方法。
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(); } }
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; } }
Route::get('accessor/index', 'AccessorController@index');
index
方法中,我们首先使用 Post
在 模型来加载示例帖子。
name
接下来,我们检查
这就是 Eloquent 变异器和访问器的工作原理!🎜
今天,我们探讨了 Laravel 中 Eloquent ORM 的修改器和访问器的概念。它提供了一种在将数据保存到数据库和从数据库中提取数据之前更改数据的好方法。
对于那些刚刚开始使用 Laravel 或希望通过扩展来扩展您的知识、网站或应用程序的人,我们在 Envato Market 上提供了多种可供您学习的内容。
以上是Laravel中的优雅访问器和修改器的详细内容。更多信息请关注PHP中文网其他相关文章!