Laravel 11 在数据库教程中存储 JSON 格式数据

Laravel 中的 <math xmlns="http://www.w3.org/1998/Math/MathML"> c a s t s 属性允许您指定模型某些属性的数据类型。使用 casts 属性允许您指定模型某些属性的数据类型。使用 </math>casts属性允许您指定模型某些属性的数据类型。使用casts 时,Laravel 会自动在常见数据类型(如字符串、整数、布尔值和 JSON)之间转换属性。

在此示例中,我们将创建一个包含两列的 products 表:name 和 details。details 列将使用 JSON 数据类型。接下来,我们将为 Post 模型中的 details 列设置 JSON 强制转换。之后,我们将创建一条记录并搜索一条记录。让我们通过这些步骤来了解它是如何工作的。

第 1 步:安装 Laravel 11

首先,我们需要使用以下命令获取一个新的 Laravel 11 版本应用程序,因为我们是从头开始。因此,打开您的终端或命令提示符并运行以下命令:

composer create-project laravel/laravel example-app

Step 2: Create Migration 步骤 2:创建迁移 在这里,我们需要为包含"name"和"details"(JSON 列)列的 "products" 表创建数据库迁移,并且我们还将为 products 表创建一个模型。

php artisan make:migration create_products_table

数据库/迁移/2024_04_11_141714_create_products_table.php

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.
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string("name");
            $table->json("details")->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

然后运行 migration 命令以创建 items 表。

php artisan migrate Step 3: Create Model 第 3 步:创建模型

在此步骤中,我们将使用 JSON 强制转换创建 Product.php 模型。让我们创建模型并更新以下代码:

php artisan make:model Product

App/Models/Product.php 应用程序/模型/Product.php

php 复制代码
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    protected $fillable = [
        'name', 'details'
    ]; 

    protected $casts = [
        'details' => 'json'    
    ];
}

Step 3: Create Product 第 3 步:创建产品

在第三步中,我们将创建一个用于测试的路由,以使用 JSON 数据创建新产品。因此,在此处创建一个路由。

routes/web.php 路线/web.php

php 复制代码
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\ProductController; Route::get('products/create', [ProductController::class, 'create']);

现在你可以看到控制器文件代码:

app/Http/Controllers/ProductController.php

php 复制代码
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Product;

class ProductController extends Controller
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function create()
    {
        $input = [
            'name' => 'Gold',
            'details' => [
                'brand' => 'Jewellery', 
                'tags' => ['gold', 'jewellery', 'money']
            ]
        ];

       return Product::create($input);
    }
}

现在,您将看到以下输出:

php 复制代码
{
  "name": "Gold",
  "details": {
    "brand": "Jewellery",
    "tags": [
      "gold",
      "jewellery",
      "money"
    ]
  },
  "updated_at": "2024-09-12T13:12:44.000000Z",
  "created_at": "2024-09-12T13:12:44.000000Z",
  "id": 1
}

第 3 步:搜索产品

在第三步中,我们将创建一个用于 test 的 search product 的路由。因此,在此处创建一个路由。

routes/web.php 路线/web.php

php 复制代码
<?php
 
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;
     
Route::get('products/search', [ProductController::class, 'search']);

现在你可以看到控制器文件代码:

app/Http/Controllers/ProductController.php

php 复制代码
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Product;

class ProductController extends Controller
{
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function search()
    {
        $product = Product::whereJsonContains('details->tags', 'money')->get();
        return $product;
    }
}

现在,您将看到以下输出:

php 复制代码
[
  {
    "id": 1,
    "name": "Gold",
    "details": {
      "tags": [
        "gold",
        "jewellery",
        "money"
      ],
      "brand": "Jewellery"
    },
    "created_at": "2024-09-12T13:12:44.000000Z",
    "updated_at": "2024-09-12T13:12:44.000000Z"
  }
]

这样你就可以轻松地在 laravel 中处理 json 数据。

相关推荐
也无晴也无风雨1 小时前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
2401_857610034 小时前
多维视角下的知识管理:Spring Boot应用
java·spring boot·后端
代码小鑫4 小时前
A027-基于Spring Boot的农事管理系统
java·开发语言·数据库·spring boot·后端·毕业设计
不二人生5 小时前
SQL面试题——连续出现次数
hive·sql·面试
颜淡慕潇6 小时前
【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
后端·云原生·容器·kubernetes·问题解决
独泪了无痕6 小时前
WebStorm 如何调试 Vue 项目
后端·webstorm
清酒伴风(面试准备中......)7 小时前
Java集合 List——针对实习面试
java·面试·list·实习
怒放吧德德7 小时前
JUC从实战到源码:JMM总得认识一下吧
java·jvm·后端
代码小鑫8 小时前
A025-基于SpringBoot的售楼管理系统的设计与实现
java·开发语言·spring boot·后端·毕业设计