Database Component

Компонент triangle/database предоставляет работу с базами данных на основе Illuminate Database (Laravel).

Установка

composer require triangle/database

Конфигурация

Настройки базы данных находятся в config/database.php:

return [
    'default' => 'mysql',
    
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => '127.0.0.1',
            'port' => 3306,
            'database' => 'database',
            'username' => 'user',
            'password' => 'password',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
        ],
        
        'pgsql' => [
            'driver' => 'pgsql',
            'host' => '127.0.0.1',
            'port' => 5432,
            'database' => 'database',
            'username' => 'user',
            'password' => 'password',
            'charset' => 'utf8',
            'prefix' => '',
        ],
        
        'sqlite' => [
            'driver' => 'sqlite',
            'database' => database_path('database.sqlite'),
            'prefix' => '',
        ],
    ],
];

Query Builder

Базовые запросы

use Triangle\Database\DB;

// Выбор всех записей
$users = DB::table('users')->get();

// Выбор одной записи
$user = DB::table('users')->where('id', 1)->first();

// Выбор значения одного поля
$name = DB::table('users')->where('id', 1)->value('name');

// Подсчет записей
$count = DB::table('users')->count();

// Вставка
DB::table('users')->insert([
    'name' => 'John',
    'email' => 'john@example.com',
]);

// Обновление
DB::table('users')
    ->where('id', 1)
    ->update(['name' => 'Jane']);

// Удаление
DB::table('users')->where('id', 1)->delete();

Условия WHERE

DB::table('users')
    ->where('name', 'John')
    ->where('age', '>', 18)
    ->get();

DB::table('users')
    ->whereIn('id', [1, 2, 3])
    ->get();

DB::table('users')
    ->whereNull('deleted_at')
    ->get();

DB::table('users')
    ->whereBetween('age', [18, 65])
    ->get();

JOIN

DB::table('users')
    ->join('posts', 'users.id', '=', 'posts.user_id')
    ->select('users.*', 'posts.title')
    ->get();

Агрегатные функции

DB::table('orders')->sum('amount');
DB::table('orders')->avg('amount');
DB::table('orders')->max('amount');
DB::table('orders')->min('amount');

Eloquent ORM

Модели

<?php

namespace App\Model;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $table = 'users';
    protected $fillable = ['name', 'email'];
    protected $hidden = ['password'];
}

Использование

use App\Model\User;

// Получить все
$users = User::all();

// Найти по ID
$user = User::find(1);

// Создать
$user = User::create([
    'name' => 'John',
    'email' => 'john@example.com',
]);

// Обновить
$user = User::find(1);
$user->name = 'Jane';
$user->save();

// Удалить
$user = User::find(1);
$user->delete();

Отношения

// One-to-Many
class User extends Model
{
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}

// Many-to-One
class Post extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}

// Использование
$user = User::find(1);
$posts = $user->posts;

Миграции

Создание миграции:

php master make:migration create_users_table

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

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('users');
    }
};

Выполнение миграций:

php master migrate

Транзакции

DB::transaction(function () {
    DB::table('users')->insert(['name' => 'John']);
    DB::table('posts')->insert(['title' => 'Post']);
});