Laravel fournit des moulages AsArrayObject et Ascollection pour gérer plus efficacement les attributs JSON complexes, permettant une manipulation intuitive des structures de données imbriquées.
<!-- Syntax highlighted by torchlight.dev --><?php use Illuminate\Database\Eloquent\Casts\AsArrayObject; use Illuminate\Database\Eloquent\Casts\AsCollection; class User extends Model { protected $casts = [ 'settings' => AsArrayObject::class, 'tags' => AsCollection::class ]; }
Explorons un exemple complet d'un modèle de produit qui utilise les attributs JSON pour gérer les spécifications et les variantes:
<!-- Syntax highlighted by torchlight.dev --><?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Casts\AsArrayObject; use Illuminate\Database\Eloquent\Casts\AsCollection; class Product extends Model { protected $fillable = ['name', 'specs', 'variants']; protected $casts = [ 'specs' => AsArrayObject::class, 'variants' => AsCollection::class, ]; } // Migration for this model would look like: public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->json('specs'); $table->json('variants'); $table->timestamps(); }); } // Usage example: $product = Product::create([ 'name' => 'Gaming Laptop', 'specs' => [ 'processor' => 'Intel i7', 'ram' => '16GB', 'storage' => [ 'primary' => '512GB SSD', 'secondary' => '1TB HDD' ] ], 'variants' => [ ['color' => 'Black', 'price' => 999], ['color' => 'Silver', 'price' => 1099] ] ]); // // Update nested specs without any PHP errors $product->specs['storage']['primary'] = '1TB SSD'; $product->save(); // Use collection methods on variants $product->variants->push(['color' => 'Red', 'price' => 1199]); $product->save(); // Filter variants using collection methods $expensiveVariants = $product->variants->where('price', '>', 1000);
Ces moulages permettent une manipulation transparente des données JSON tout en maintenant un code propre et maintenable. AsArrayObject fournit un accès semblable à un tableau, tandis qu'Ascollection offre aux puissants méthodes de collecte de Laravel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!