РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
76 of 1392 menu

Поле json

Поле json в миграциях Laravel позволяет хранить структурированные данные в формате JSON. Это удобно для хранения наборов параметров, настроек или любых других данных, которые не требуют отдельной таблицы. При использовании поля json база данных автоматически проверяет корректность JSON-структуры. Для работы с такими полями в запросах существуют специальные методы.

Синтаксис

<?php Schema::table('table_name', function (Blueprint $table) { $table->json('column_name'); }); ?>

Пример

Давайте создадим таблицу 'products' с полем 'options' типа json:

<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateProductsTable extends Migration { public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->json('options')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('products'); } } ?>

Пример

Давайте создадим модель Product с указанием приведения типов:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Product extends Model { protected $fillable = [ 'name', 'options', ]; protected $casts = [ 'options' => 'array', ]; } ?>

Благодаря $casts, при чтении поле 'options' автоматически превращается в массив, а при записи - обратно в JSON.

Пример

Давайте сохраним продукт с JSON-данными:

<?php namespace App\Http\Controllers; use App\Models\Product; class ProductController extends Controller { public function store() { $product = new Product(); $product->name = 'Laptop'; $product->options = [ 'color' => 'silver', 'size' => '15 inch', 'weight' => '2.5 kg', ]; $product->save(); return $product; } } ?>

Результат выполнения кода:

"Product saved successfully with JSON data"

Пример

Давайте обновим конкретное поле в JSON-структуре:

<?php namespace App\Http\Controllers; use App\Models\Product; class ProductController extends Controller { public function update() { $product = Product::find(1); $options = $product->options; $options['color'] = 'black'; $product->options = $options; $product->save(); return $product; } } ?>

Пример

Давайте отфильтруем продукты по значению внутри JSON-поля с использованием whereJsonContains:

<?php namespace App\Http\Controllers; use App\Models\Product; class ProductController extends Controller { public function index() { $products = Product::whereJsonContains('options->color', 'silver')->get(); foreach ($products as $product) { echo $product->name . "\n"; } } } ?>

Результат выполнения кода:

"Laptop" "Tablet"

Пример

Давайте отфильтруем продукты по длине JSON-массива с использованием whereJsonLength:

<?php namespace App\Http\Controllers; use App\Models\Product; class ProductController extends Controller { public function index() { $products = Product::whereJsonLength('options', 3)->get(); foreach ($products as $product) { echo $product->name . "\n"; } } } ?>

Результат выполнения кода:

"Laptop" "Smartphone"

Смотрите также

  • метод whereJsonContains,
    который проверяет наличие значения в JSON-массиве
  • метод whereJsonLength,
    который фильтрует по длине JSON-массива
  • метод text,
    который создаёт текстовое поле в таблице
  • метод casts,
    который задаёт приведение типов в моделях
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить