Дисциплины - Ресурсно-компонентное программирование

Основы разработки бэкенда на Laravel - База данных - Конструктор запросов

Построитель запросов (Query builder) Laravel предлагает интерфейс для создания и выполнения запросов к базе данных. Его можно использовать для выполнения большинства операций с базой данных в вашем приложении и он отлично работает со всеми поддерживаемыми Laravel системами баз данных.

Вы можете использовать метод table фасада DB, чтобы начать запрос. Метод table возвращает текущий экземпляр построителя запросов для данной таблицы, позволяя вам связать больше ограничений к запросу

$cat = DB::table(‘categories’);

Рассмотрим реализацию CRUD с помощью построителя запросов

SELECT

Для создания SELECT-запросов, сперва необходимо создать объект классаDB и статического метода table(), входящим параметром в который необходимо передать имя таблицы.

Для получения результата можно воспользоваться следующими методами:

  • get() его мы только что использовали, он возвращает массив объектов — результирующих строк с полями;
  • first() этот метод вернёт один объект-результат, который подошёл под критерии запроса;
  • find($id)  метод находит запись по её ID; это краткая форма для записи where('id', '=', $id); возвращает один объект-результат;
  • only($fieldname)  возвращает значение одного поля, подходящего под запрос;
  • get(array(…))мы можем передать методу get() массив полей, чтобы получить только их.

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

$cat = DB::table(‘categories’)->get();

Уточнение запроса осуществляется с помощью метода where()

$cat = DB::table(‘categories’)->where(‘showhide’, ‘=’, ‘show’)->get();

Конструктор запросов может быть использован для выборки данных из нескольких таблиц через JOIN.

DB::table('users')
            ->join('contacts', 'users.id', '=', 'contacts.user_id')
            ->join('orders', 'users.id', '=', 'orders.user_id')
            ->select('users.id', 'contacts.phone', 'orders.price');

Если необходимо сделать сложную фильтацию, то в значение методов where()или orWhere() можно добавлять функуию с дополнительным query-запросом:

 DB::table('users')
            ->where('name', '=', 'Джон')
            ->orWhere(function ($query) {
                $query->where('votes', '>', 100)
                      ->where('title', '<>', 'Админ');
})->get();

INSERT

DB::table('users')->insert(
    array('email' => 'john@example.com', 'votes' => 0)
);

Если необходимо вставить данные и при этом тут же получить id, можно воспользоваться методом insertGetId.

$id = DB::table('users')->insertGetId(
    array('email' => 'john@example.com', 'votes' => 0)
);

Laravel также поддерживает множественную вставку данных:

DB::table('users')->insert(array(
    array('email' => 'taylor@example.com', 'votes' => 0),
    array('email' => 'dayle@example.com', 'votes' => 0),
));

UPDATE

Для обновления данных можно воспользоваться методом update().

DB::table('users')->where('id', 1)
                  ->update(array('votes' => 1));

Однако, обновление можно осуществить и с помощью метода save()

$obj = DB::table('users')->where('id', 1);
$obj->votes = 1;
$obj->save();

DELETE

 DB::table('users')->where('votes', '<', 100)->delete();

 DB::update('update users set votes = 100 where name = ?', array('John'));

Выполнение запросов другого типа

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

Транзакции

Для выполнения запросов внутри одной транзакции, можно воспользоваться методом transaction.

DB::transaction(function(){
    DB::table('users')->update(array('votes' => 1));
    DB::table('posts')->delete();
});

Доступ к соединениям

При использовании нескольких подключений к БД, вы можете получить к ним доступ через метод  DB::connection:

$users = DB::connection('foo')->select(...);
$pdo = DB::connection()->getPdo();
// получение объектаPDO указанног соединения.
DB::reconnect('foo');
// переподключение к базе данных

Если вам нужно отключиться от БД - например, чтобы не превысить лимит max_connections в БД, вы можете воспользоваться методом disconnect

DB::disconnect('foo');

По умолчанию, Laravel записывает все SQL-запросы в памяти, выполненные в рамках текущего HTTP-запроса.

Однако, в некоторых случаях, как, например, при вставке большого количества записей, это может быть слишком ресурсозатратно. Для отключения журнала вы можете использовать метод disableQueryLog:

DB::connection()->disableQueryLog();

Для получения массива выполненных запросов используйте метод getQueryLog:

$queries = DB::getQueryLog();

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться
20421 БГУИР
30421 БГУИР