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
Libérer: 2025-03-05 16:27:13
original
909 Les gens l'ont consulté

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
    ];
}
Copier après la connexion

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);
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal