Публикации - Laravel

База данных и модели

Миграции
Загрузка первоначальных данных в БД
Фабрики моделей
Связи моделей
Постраничная навигация
Модели

С полным списком подключений к базам данных можно ознакомиться в файле /config/database.php

Однако переменные к подключения к базе данных находятся в файле .env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db_name
DB_USERNAME=root
DB_PASSWORD=

В данном случае, сервер берет настройки подключения из файла .env, который находится в корне проекта. Значит все необходимые для подключения данные должны быть определены в этом файле.

Рассмотрим часть содержимого файла .env, в котором определяются данные для подключения.

Запросы к базе данных, CRUD-операции

SELECT

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

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

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

  • 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

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. Подключение CKEditor https://artisansweb.net/install-use-ckeditor-laravel/#comments
2. Регистрация и авторизация https://know-online.com/post/laravel-reg
3. Что нового в Laravel 8 https://sergeymukhin.com/blog/chto-novogo-v-laravel-80
4. Авторизация Sanctum <iframe width="560" height="315" src="https://www.youtube.com/embed/MT-GJQIY3EU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>