Блог программиста

Опытный программист не только делится этим самым опытом, но и сам изучает что-то новое в сфере программирования и ИТ в целом и рассказывает об этом посетителям сайта!

Laravel - запросы к базе данных

Для работы с базой данных Laravel предлагает использовать raw-запросы DB::, Query Builder или Eloquent ORM. Давайте разберёмся что это такое.

Raw-запросы к базе данных

Язык SQL содержит в себе операторы манипуляции данными: SELECT, INSERT, UPDATE и DELETE. Для каждой такой команды класс DB в Laravel имеет соответствующие методы, которые так и называются: select(), insert(), update(), delete(). Такие запросы в Laravel называются сырыми или raw-запросы. Пример:

$results = DB::select('select * from users where id = ?', [1]);
DB::insert('insert into users (id, name) values (?, ?)', [1, 'Alex']);
$count = DB::update('update users set votes = 100 where name = ?', ['Mike']);
$count = DB::delete('delete from users');

, где $results - массив результатов, $count - число затронутых строк.

Если Вы хотите выполнить запрос другого типа, используйте statement(), например:

DB::statement('drop table users');

Хотите получать каждый выполненный вашим приложением SQL-запрос, используйте метод listen():

DB::listen(function ($query) {
	// $query->sql
	// $query->bindings
	// $query->time
	  
});

Транзакции

Выполнять запросы можно внутри одной транзакции с помощью transaction():

DB::transaction(function() {
    DB::insert(...);
    DB::update(...);
    DB::delete(...);
});

Если нужно, то это можно сделать вручную:

DB::beginTransaction();

Отмена транзакции и изменений, вызванных её выполнением:

DB::rollback();

Завершение и подтверждение транзакции:

DB::commit();

Query Builder

Query Builder или конструктор запросов Laravel предоставляет удобный интерфейс запросов к базе данных.

Метод table() класса DB возвращает экземпляр Query Builder, то есть конструктора запросов, для указанной таблицы. У конструктора запросов есть свои методы.

Получить все записи таблицы можно с помощью метода get():

$users = DB::table('users')->get();
return view('user', ['users' => $users]);

Получить только одну строку, используйте where(...)->first():

$user = DB::table('users')->where('name', 'Alex')->first();
echo $user->name;

Если только одно значение, можно через where(...)->value():

$age = DB::table('users')->where('name', 'John')->value('age');

Требуется работать с тысячами строк - разбиваем результаты на части с помощью chunk():

DB::table('users')->chunk(100, function($users) {
    foreach ($users as $user) {
        //
    }
});

Необходимо получить значения одного столбца? Используем pluck() или lists():

$titles = DB::table('roles')->pluck('title');
$roles = DB::table('roles')->pluck('title', 'name');
$titles = DB::table('roles')->lists('title');
$roles = DB::table('roles')->lists('title', 'name');

Метод pluck отличается от lists тем, что первый возвращает коллекцию, а второй массив.

Query Builder достаточно сложный и продуманный инструмент работы с базами данных, но содержит также агрегатные функции, выборки(select), объединения (join) и т.д..

Работать с базой данных в Laravel можно используя подход объектно-реляционного отображения (ORM) Eloquent. Но об этом поговорим не сейчас, а в ближайщем будущем.


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений