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

相关推荐
m0_748256143 小时前
SpringBoot
java·spring boot·后端
多想和从前一样4 小时前
Django 创建表时 “__str__ ”方法的使用
后端·python·django
涛粒子6 小时前
Spring Bean 生命周期的执行流程
java·后端·spring
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
测试涛叔6 小时前
高级自动化测试常见面试题(Web、App、接口)
软件测试·面试
赵琳琅6 小时前
MDX语言的安全开发
开发语言·后端·golang
夏梓蕙7 小时前
Elixir语言的软件开发工具
开发语言·后端·golang
夏梓蕙8 小时前
R语言的Web开发
开发语言·后端·golang
绝无仅有8 小时前
Deepseek 万能提问公式:高效获取精准答案
后端·面试·架构
慕容秋瑶9 小时前
T-SQL语言的Web开发
开发语言·后端·golang