PHP
Querying and Updating JSON Data in Database Columns with Eloquent
Learn to effectively query and update structured JSON column data in your database using Laravel Eloquent's powerful `->>` operator and dot notation for efficiency.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $casts = [
'details' => 'array',
];
protected $fillable = ['name', 'details'];
}
// Migration example (products table):
// Schema::create('products', function (Blueprint $table) {
// $table->id();
// $table->string('name');
// $table->json('details')->nullable(); // Store JSON data
// $table->timestamps();
// });
// Example Usage:
// Creating a product with JSON details
$product = Product::create([
'name' => 'Smartphone X',
'details' => [
'color' => 'Black',
'storage' => '128GB',
'features' => ['camera', '5G', 'NFC']
]
]);
// Querying products where 'color' in details is 'Black'
$blackPhones = Product::where('details->color', 'Black')->get();
// Querying products where 'storage' in details is '128GB' AND '5G' is in features array
$advancedQuery = Product::where('details->storage', '128GB')
->whereJsonContains('details->features', '5G')
->get();
// Updating a specific JSON property
$product->update(['details->color' => 'White']);
How it works: This snippet demonstrates how to store, query, and update JSON data directly within a database column using Eloquent. By casting the `details` attribute to `array` in the model, Eloquent automatically handles serialization and deserialization. You can query specific nested keys using the `->` operator (e.g., `details->color`) and even check for existence within JSON arrays with `whereJsonContains`, providing powerful querying capabilities.