Maison >développement back-end >tutoriel php >Travailler avec des attributs JSON à l'aide de lans lâches de Laravel

Travailler avec des attributs JSON à l'aide de lans lâches de Laravel

James Robert Taylor
James Robert Taylororiginal
2025-03-05 16:27:13914parcourir

Working with JSON Attributes Using Laravel's Array Casts

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 = [
        &#39;settings&#39; => 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 = [&#39;name&#39;, &#39;specs&#39;, &#39;variants&#39;];
    protected $casts = [
        &#39;specs&#39; => 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn