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