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 数据。

相关推荐
百成Java8 分钟前
基于springboot的旅游网站
java·spring boot·后端·mysql·spring·智能家居·旅游
Pandaconda29 分钟前
【计算机网络 - 基础问题】每日 3 题(二十三)
开发语言·网络·笔记·后端·计算机网络·面试·职场和发展
IT杨秀才30 分钟前
Go语言的Context妙用
后端·go
野生派蒙32 分钟前
IDEA 关闭自动补全功能(最新版本)
java·开发语言·ide·后端·学习·intellij-idea
为java添砖加瓦44 分钟前
【读写分离?聊聊Mysql多数据源实现读写分离的几种方案】
java·数据库·spring boot·后端·mysql·spring·mybatis
2401_857617621 小时前
Spring Boot技术:构建高效网上购物平台
java·spring boot·后端
吃海鲜的骆驼2 小时前
六、设计模式-6.1、单例模式
java·单例模式·设计模式·面试
Pandaconda2 小时前
【计算机网络 - 基础问题】每日 3 题(二十五)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
小明菜菜2 小时前
面试经典150题 堆
数据结构·算法·面试
河北小田2 小时前
局部变量成员变量、引用类型、this、static
java·后端·程序员