Dalam artikel ini, kami akan memperkenalkan pengubah suai dan pengakses Eloquent ORM dalam rangka kerja web Laravel. Selepas pengenalan, kita akan memahami konsep ini melalui beberapa contoh.
Dalam Laravel, pengubah suai dan pengakses membenarkan anda menukar data sebelum menyimpannya atau mendapatkan data daripada pangkalan data. Khususnya, mutator membenarkan anda menukar data sebelum menyimpannya ke pangkalan data. Aksesori, sebaliknya, membenarkan anda menukar data selepas mendapatkannya daripada pangkalan data.
Malah, model Laravel ialah tempat utama di mana anda boleh membuat pengubah suai dan kaedah pengakses. Sudah tentu, adalah bagus untuk mempunyai semua pengubahsuaian anda di satu tempat dan bukannya berselerak di tempat yang berbeza.
Sekarang anda sudah biasa dengan konsep asas pengubah suai dan aksesori, kami akan meneruskan untuk membangunkan contoh praktikal untuk menunjukkannya.
Saya andaikan anda tahu tentang model Eloquent dalam Laravel, kami akan menggunakan model Post
sebagai titik permulaan untuk contoh. Jika anda belum mencipta model Post
lagi, mari buat model itu menggunakan perintah artisan
. 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
方法来更改帖子标题。
到目前为止,我们刚刚创建了赋值器和访问器方法,但我们将在接下来的部分中测试它们。
让我们在 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
rrreee
rrreee
Mari kita gantikan kandungan fail ini dengan kandungan berikut. 🎜 rrreee 🎜Memandangkan kami menggunakan pilihan--migration
, ia juga harus membuat migrasi pangkalan data yang berkaitan. Sekiranya anda tidak tahu, anda boleh menjalankan arahan berikut supaya ia benar-benar mencipta jadual dalam pangkalan data. 🎜
rrreee
🎜Untuk menjalankan contoh dalam artikel ini, anda perlu mencipta lajur name
dalam jadual post
. Walau apa pun, kami tidak akan membincangkan butiran penghijrahan kerana itu di luar skop artikel ini. 🎜
{attribute-name}
. Sudah tentu, anda perlu menggantikan {attribute-name}
dengan nama atribut sebenar dalam kes unta. Adalah penting untuk ambil perhatian bahawa semua kaedah pengakses dan pengubah suai mengembalikan contoh Attribute
, yang mentakrifkan cara untuk mengakses dan mengubah suai atribut. 🎜
🎜Apabila memanggil kaedah mutator pada sifat, parameter set
akan digunakan. Untuk memudahkan, kami hanya menggunakan fungsi strtolower
, yang menukar tajuk siaran kepada huruf kecil sebelum menyimpannya ke pangkalan data. 🎜
🎜Dengan cara ini anda boleh mencipta kaedah mutasi pada semua lajur jadual. Seterusnya, mari kita lihat kaedah pengakses. 🎜
get
apabila mentakrifkan harta tersebut. 🎜
🎜Mari kita lihat kaedah pengakses. 🎜
rrreee
🎜Selepas mendapat nilai atribut name
daripada pangkalan data, parameter get
akan dipanggil. Dalam kes kami, kami hanya menggunakan kaedah ucfirst
untuk menukar tajuk siaran. 🎜
🎜Setakat ini kami baru sahaja mencipta kaedah penyerah hak dan akses, tetapi kami akan mengujinya di bahagian seterusnya. 🎜
🎜Peranan mutator🎜
🎜Mari kita buat pengawal dalam app/Http/Controllers/MutatorController.php supaya kita boleh menguji kaedah mutator yang kita buat di bahagian sebelumnya. 🎜
rrreee
🎜Selain itu, anda perlu mencipta laluan yang berkaitan dalam fail routes/web.php untuk mengakses pengawal mutator. 🎜
rrreee
🎜Dalam kaedah index
, kami membuat siaran baharu menggunakan model Post
. Ia harus menetapkan nilai lajur name
kepada nilai post title
kerana kami menggunakan strtolower
dalam fungsi kaedah mutator yang sepadan. 🎜
🎜Aksesori dalam tindakan🎜
🎜Untuk melihat pengakses sedang beraksi, mari teruskan dan buat fail pengawal app/Http/Controllers/AccessorController.php dengan kandungan berikut: 🎜
rrreee
🎜Sekali lagi, anda perlu menggunakan laluan yang berkaitan dalam fail routes/web.php untuk mengakses pengawal akses. 🎜
rrreee
🎜Dalam kaedah index
, kami mula-mula memuatkan contoh siaran menggunakan model Post
. 🎜
🎜Seterusnya, kami menyemak nilai lajur Hari ini, kami meneroka konsep pengubah suai dan aksesori untuk ORM Fasih dalam Laravel. Ia menyediakan cara terbaik untuk menukar data sebelum menyimpannya ke pangkalan data dan mengekstraknya daripada pangkalan data.
Bagi anda yang baru bermula dengan Laravel atau ingin mengembangkan pengetahuan, tapak web atau aplikasi anda dengan sambungan, kami mempunyai pelbagai kandungan untuk anda pelajari daripada Pasaran Envato.
Atas ialah kandungan terperinci Aksesori dan pengubah suai yang elegan dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!