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

相关推荐
nameofworld7 小时前
前端面试笔试(六)
前端·javascript·面试·学习方法·递归回溯
哎呦没8 小时前
Spring Boot OA:企业办公自动化的高效路径
java·spring boot·后端
前端fighter8 小时前
js基本数据新增的Symbol到底是啥呢?
前端·javascript·面试
真心喜欢你吖8 小时前
Spring Boot与MyBatis-Plus的高效集成
java·spring boot·后端·spring·mybatis
2401_857636398 小时前
实验室管理技术革新:Spring Boot系统
数据库·spring boot·后端
2401_857600958 小时前
实验室管理流程优化:Spring Boot技术实践
spring boot·后端·mfc
2402_857589368 小时前
企业办公自动化:Spring Boot OA管理系统开发与实践
java·spring boot·后端
豆子熊.9 小时前
外包干了3年,技术退步明显...
软件测试·selenium·测试工具·面试·职场和发展
恬淡虚无真气从之9 小时前
go interface(接口)使用
开发语言·后端·golang
GISer_Jing9 小时前
Vue前端进阶面试题目(二)
前端·vue.js·面试