• Laravel и PostgreSQL: настройка, миграции, JSONB и работа с базой данных
    Хотите заказать услугу прямо сейчас?

    Laravel и PostgreSQL: Полное руководство по настройке и использованию

    Laravel отлично работает с PostgreSQL — одной из самых популярных реляционных баз данных. В этом руководстве мы рассмотрим настройку соединения, миграции, типы данных, работу с JSON и специфические возможности PostgreSQL в Laravel.


    Подключение Laravel к PostgreSQL

    Для начала убедитесь, что установлен драйвер pdo_pgsql на сервере PHP.

    В файле .env настройте соединение:

    DB_CONNECTION=pgsql
    DB_HOST=127.0.0.1
    DB_PORT=5432
    DB_DATABASE=laravel_db
    DB_USERNAME=postgres
    DB_PASSWORD=your_password
    

    В config/database.php подключение уже настроено:

    'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],
    

    Миграции и типы данных PostgreSQL

    Laravel поддерживает основные типы данных PostgreSQL:

    • integer, bigInteger, smallInteger
    • string, text
    • boolean
    • json, jsonb — для хранения JSON
    • uuid — уникальные идентификаторы
    • timestamps — created_at и updated_at
    • decimal, float — для чисел с плавающей точкой

    Пример миграции с PostgreSQL:

    php artisan make:migration create_products_table --create=products
    
    <?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->decimal('price', 10, 2);
                $table->jsonb('metadata')->nullable();
                $table->timestamps();
            });
        }
    
        public function down()
        {
            Schema::dropIfExists('products');
        }
    }
    

    Работа с JSONB

    PostgreSQL поддерживает jsonb, что позволяет хранить сложные структуры данных.

    $product = Product::create([
        'name' => 'Телефон',
        'price' => 499.99,
        'metadata' => ['color' => 'черный', 'memory' => '128GB']
    ]);
    
    // Поиск по JSONB
    $blackPhones = Product::where('metadata->color', 'черный')->get();
    

    Особенности PostgreSQL в Laravel

    • Уникальные индексы: $table->unique([‘column1′,’column2’]);
    • Enum: $table->enum(‘status’, [‘active’, ‘inactive’]);
    • Full-text search: через tsvector и pg_trgm extension
    • UUID: $table->uuid(‘id’)->primary();

    Использование транзакций

    Для обеспечения целостности данных:

    DB::transaction(function () {
        $user = User::create(['name' => 'Ivan']);
        $user->posts()->create(['title' => 'Post 1']);
    });
    

    Оптимизация запросов

    • Используйте with() для жадной загрузки отношений
    • Добавляйте индексы на поля для фильтрации и сортировки
    • Используйте jsonb_path_query и функции PostgreSQL для сложного поиска по JSON
    • Для больших таблиц используйте пагинацию и лимиты

    FAQ — Часто задаваемые вопросы

    1. Какие версии PostgreSQL поддерживает Laravel?

    Laravel официально поддерживает PostgreSQL 9.6 и выше.

    2. Можно ли использовать JSONB вместо отдельных колонок?

    Да, JSONB отлично подходит для хранения динамических или редко используемых полей.

    3. Как подключить UUID как primary key?

    Используйте $table->uuid(‘id’)->primary(); и в модели добавьте public $incrementing = false; и protected $keyType = 'string';.

    4. Поддерживает ли Laravel транзакции PostgreSQL?

    Да, через DB::transaction() можно безопасно выполнять несколько операций.

    5. Можно ли использовать специфические функции PostgreSQL через Eloquent?

    Да, через DB::raw() или кастомные запросы можно использовать любые функции PostgreSQL.


    Вывод

    Laravel и PostgreSQL работают вместе максимально эффективно. Используя HasMany, JSONB, транзакции, UUID и индексы, вы можете создавать быстрые и гибкие приложения с надежной базой данных. PostgreSQL предоставляет расширенные возможности, которые полностью интегрируются с Eloquent ORM и Laravel Query Builder.

    Вам может быть интересным

    Laravel Notification: Полное руководство с примерами кода

    Посмотреть

    Laravel HasMany: Полное руководство с примерами кода

    Посмотреть

    📰 Последние статьи

    Почему становятся программистами 💻

    Читать

    Киберпреступность в 2026: как устроена теневая цифровая экономика

    Читать

    «Не заставляйте меня думать» — Стив Круг: разбор книги, идеи и честная критика

    Читать

    🚀 Можно ли написать сайт за 1 день: честный разбор с примерами

    Читать

    Разговор о взломе ВК и безопасности аккаунтов

    Читать

    Что сдавать на программиста после 9 класса в 2026 году

    Читать

    Дорама «Милашка-программист» — честный разбор от программиста

    Читать

    1С-Битрикс снова подорожал: рынок это воспринял гораздо болезненнее, чем кажется

    Читать

    🚨 Почему ломается сайт: полный разбор с примерами кода

    Читать

    ИИ для программистов 1С: как искусственный интеллект меняет разработку в 1С

    Читать

    🤖 Заменит ли ИИ программистов: полный разбор будущего профессии

    Читать

    ИИ для программистов: как искусственный интеллект меняет разработку в 2026 году

    Читать

    Чёрный список работодателей — почему программисты закрывают на него глаза в 2026 году

    Читать

    Почему даже senior-разработчики иногда боятся обновлять Bitrix

    Читать

    🔐 Почему компании переходят на Zero Trust: новая модель безопасности в 2026 году

    Читать

    Жаргон программистов: как они разговаривают и почему это звучит как заклинания

    Читать

    Что будет, если отключат интернет: полный разбор последствий

    Читать

    Как защищают приложения в 2026: угрозы, архитектура и реальная безопасность

    Читать

    GitHub Copilot и “код из чужих проектов” — в чём скандал

    Читать

    Я вообще хороший программист или просто умею гуглить?

    Читать

    Какие книги читать программисту с нуля — дружеский обзор без скучной теории

    Читать

    Почему одни разработчики зарабатывают $100, а другие $10 000

    Читать

    Комментарии (0)

    Оставить комментарий

    Кейсы компании

    Кейс: создание кастомной корзины на 1С‑Битрикс с лицензией «Стандарт»

    Посмотреть

    Кастомная система комментариев WordPress с микроразметкой и AJAX

    Посмотреть

    Как создать компонент в Битрикс 1С, который изменяет цену на китайские юани

    Посмотреть

    🎯 Кейс Павлов Студио: как мы внедрили Яндекс SmartCaptcha для защиты всех форм сайта (включая Bitrix)

    Посмотреть

    Разработка онлайн-калькулятора для товаров на сайте wp

    Посмотреть

    Обновление сайта с битрикс 1с с версии php 5.6 до 8.2

    Посмотреть

    Разработка сервиса для сбора информации из соц.сети «Вконтате»

    Посмотреть

    Разработка мега-меню для сайта на wordpress https://doma-penoblok.ru/

    Посмотреть

    Разработка и сопровождение сайта  https://aaa-sitrak.ru/ с последующей интеграцией на 1с-битрикс

    Посмотреть

    Разработка интернет-магазина https://sklad38.ru/ на битрикс 1с

    Посмотреть

    Доработка сайта https://tochka-kontakta.ru/ для организации «Точка Контакта»

    Добро пожаловать в WordPress. Это ваша первая запись. Отредактируйте или удалите ее, затем начинайте создавать!

    Посмотреть
    Max Messenger