How to Save JSON Data in Database in Laravel 11?
In this post, I will show you how to save JSON format data into database in laravel 11 application.
JSON (JavaScript Object Notation) is a lightweight, text-based format for data exchange that is easy for humans to read and write and easy for machines to parse and generate. JSON is a popular data format used in web applications, APIs, and data exchange between systems. JSON data is represented as key-value pairs and uses a syntax similar to JavaScript object literals. Each key-value pair is separated by a comma and enclosed in curly braces {}. Keys are always strings, while values can be strings, numbers, boolean values, arrays, or nested JSON objects.
Sometimes, if we have large data or unfixed columns, then we cannot create too many fields in a database table with the nullable field. So we have to use JSON data type to store values; that way, we can store large data or unstructured data. If you want to store a JSON array in a database in Laravel, then I will give you a simple example of how to store a JSON array, store, and access it from the database in Laravel.
In this example, we will start by creating a migration with a JSON column. Then we will create a model with getter and setter methods. When creating records, we can pass data as an array, and when retrieving records, we will receive an array. So let's take a look at a simple example to learn how to implement this.
Step for Laravel 11 Store JSON Data in Database Example
- Step 1: Install Laravel 11
- Step 2: Create Migration
- Step 3: Create Model
- Step 4: Create Route
- Step 5: Create Controller
- Run Laravel App: >
Step 1: Install Laravel 11
First of all, we need to get a fresh Laravel 11 version application using the command below because we are starting from scratch. So, open your terminal or command prompt and run the command below:
composer create-project laravel/laravel example-app
Step 2: Create Migration
Here, we need to create a database migration for the "items" table with "title" and "data" (JSON Column) columns, and also we will create a model for the items table.
php artisan make:migration create_items_table
database/migrations/2024_04_11_141714_create_items_table.php
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
Schema::create('items', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->json('data')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
Schema::dropIfExists('items');
}
};
Then run the migration command to create the items table.
php artisan migrate
Step 3: Create Model
In this step, we will create Item.php model with getter and setter. Let's create the model and update the following code:
php artisan make:model Item
App/Models/Item.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;
class Item extends Model
{
use HasFactory;
/**
* Write code on Method
*
* @return response()
*/
protected $fillable = [
'title', 'data'
];
/**
* Get the user's first name.
*
* @return \Illuminate\Database\Eloquent\Casts\Attribute
*/
protected function data(): Attribute
{
return Attribute::make(
get: fn ($value) => json_decode($value, true),
set: fn ($value) => json_encode($value),
);
}
}
Step 4: Create Route
In the third step, we will create one route for testing. So, create one route here.
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ItemController;
Route::get('item', [ItemController::class, 'index']);
Step 5: Create Controller
In this step, we will create `ItemController` file and write the `index()` method to create item records with an array and access them as an array.
app/Http/Controllers/ItemController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Item;
class ItemController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index()
{
$input = [
'title' => 'Demo Title',
'data' => [
'1' => 'One',
'2' => 'Two',
'3' => 'Three'
]
];
$item = Item::create($input);
dd($item->data);
}
}
Run Laravel App:
All the required steps have been done, now you have to type the given below command and hit enter to run the Laravel app:
php artisan serve
Now, Go to your web browser, type the given URL and view the app output:
http://localhost:8000/item
You can see database output and print variable output:
Database Output:
Output:
array:3 [
1 => "One"
2 => "Two"
3 => "Three"
]
I hope it can help you...
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- Laravel 11 CRUD with Image Upload Tutorial
- Laravel 11 Razorpay Payment Gateway Integration Example
- How to Install and Configuration Telescope in Laravel 11?
- Laravel 11 Google Recaptcha V3 Validation Tutorial
- Laravel 11 Image Intervention Tutorial With Example
- How to Create Event Calendar in Laravel 11?
- Laravel 11 Summernote Image Upload Tutorial
- How to use Multiple Database in Laravel 11?
- Laravel 11 Generate and Read Sitemap XML File Tutorial
- Laravel 11 Stripe Payment Gateway Integration Example
- Laravel 11 Dynamic Google Charts Integration Tutorial
- Laravel 11 Socialite Login with Twitter / X Account Example
- How to Get User Location using IP Address in Laravel 11?
- Laravel 11 Drag and Drop File Upload with Dropzone JS