Query Builder: INSERT

Метод insert в конструкторе запросов — это основной способ добавить новые данные в базу. Все значения автоматически экранируются (кроме Expression), что защищает от SQL-инъекций.

Метод принимает ассоциативный массив, где ключи — названия колонок, а значения — вставляемые данные.

use Imhotep\Facades\DB;

DB::table('users')->insert([
    'name' => 'Alex Ivanov',
    'email' => 'alex@company.ru',
    'age' => 28,
    'active' => true,
    'created_at' => date('Y-m-d H:i:s')
]);
PHP

Вставка нескольких записей

Для массовой вставки передайте массив массивов:

use Imhotep\Facades\DB;

$users = [
    ['name' => 'Maria Petrova', 'email' => 'maria@company.ru'],
    ['name' => 'Sergey Smirnov', 'email' => 'sergey@company.ru'],
    ['name' => 'Elena Kozlova', 'email' => 'elena@company.ru']
];

DB::table('users')->insert($users);
PHP

Вставка с использованием выражений

Для вставки сложных значений используйте класс Expression или DB::raw(...). Используйте его только с проверенными значениями.

use Imhotep\Facades\DB;
use Imhotep\Database\Expression;

DB::table('products')->insert([
    'title' => 'New Product',
    'price' => 199.99,
    'quantity' => new Expression('quantity + 5'), // или DB::raw('quantity + 5')
    'updated_at' => new Expression('NOW()')  // или DB::raw('NOW()')
]);
PHP

Вставка с игнорированием ошибок

Метод insertOrIgnore пытается вставить запись, но игнорирует ошибки дублирования:

use Imhotep\Facades\DB;

DB::table('users')->insertOrIgnore([
    'email' => 'unique@example.com',
    'name' => 'Duplicate User',
    'age' => 25
]);
PHP

Вставка с получением ID записи

Если таблица имеет автоинкрементный первичный ключ, используйте метод insertGetId:

use Imhotep\Facades\DB;

// По умолчанию используется колонка 'id'
$userId = DB::table('users')->insertGetId([
    'name' => 'Olga Novikova',
    'email' => 'olga@company.ru',
    'age' => 29
]);

// Для нестандартного имени колонки
$userId = DB::table('users')->insertGetId(
    ['name' => 'Pavel Sokolov', 'email' => 'pavel@company.ru'],
    'user_id' // Название колонки первичного ключа
);
PHP

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

Для гарантии целостности данных при множественных вставках используйте транзакции:

DB::transaction(function () {
    // Вставка пользователя
    $userId = DB::table('users')->insertGetId([
        'name' => 'Dmitry Medvedev',
        'email' => 'dmitry@company.ru'
    ]);
    
    // Вставка связанных данных
    DB::table('profiles')->insert([
        'user_id' => $userId,
        'bio' => 'Software Developer',
        'city' => 'Moscow'
    ]);
    
    DB::table('roles')->insert([
        'user_id' => $userId,
        'role' => 'admin'
    ]);
});
PHP