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