Модели
Модели расширяют класс Illuminate\Database\Eloquent\Model
.
Создание модели
Чтобы создать модель нужно воспользоваться командой:
php artisan make:model Posts
Файл модели будет помещен в директорию App/Models/
.
При запуске команд на создание моделей, можно использовать различные флаги:
Создать Модель и Миграцию
php artisan make:model Posts --migration
php artisan make:model Posts --m
Создать Модель и Фабрику
php artisan make:model Posts --factory
php artisan make:model Posts -f
Создать Модель и Сидер
php artisan make:model Posts --seed
php artisan make:model Posts -s
Создать Модель и Контроллер
php artisan make:model Posts --controller
php artisan make:model Posts -c
Создать Модель и Политику
php artisan make:model Posts --policy
Создать Модель, Миграцию, Фабрику, Сидер, Контроллер
php artisan make:model Posts -mfsc
Создать всё
php artisan make:model Posts --all
Параметры модели
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class TasksItem extends Model
{
//Использовать программное удаление. Добавляет поле deleted_at, в которое вносится дата удаления
use SoftDeletes;
//Имя, связанной с моделью, таблицы. По умолчанию, имя модели переводится из camelCase в snake_case и это будет названием таблицы.
protected $table = 'tasks_item';
//Определяет необходимость отметок времени для модели - created_at, updated_at, deleted_at.
public $timestamps = true;
//Формат хранения отметок времени модели.
protected $dateFormat = 'U';
//Указать названия полей меток времени
const CREATED_AT = 'creation_date';
const UPDATED_AT = 'last_update';
//Настройка формата времени
protected function getDateFormat()
{
return 'U';
}
//Название соединения для модели.
protected $connection = 'connection-name';
}
Конструктор запросов
Элементы запроса
Метод | Варианты | Описание |
select('name', 'email as user_email') | Указываем поля для выборки. Можно использовать MySQL функции и присваивать алиасы через as. | |
addSelect('age') | Добавить поле для select, если уже запрос сформирован. Полезно при написании мудрёных скриптов, формирующих запросы. | |
join() | INNER JOIN из MySQL | |
leftJoin() | LEFT JOIN из MySQL | |
crossJoin() | CROSS JOIN из MySQL | |
where($key, $value) | Оператор WHERE в MySQL. Для самого простого варианта использования - первым параметром передается имя поля, вторым параметром искомое значение. Можно передать 3 параметра, где 1 - поле, 2 - оператор, 3 - искомое значение |
|
where('votes', '>=', 100) | ||
where('votes', '<>', 100) | ||
where('name', 'like', 'T%') | ||
where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ]) | ||
orWhere('name', 'John') | Оператор OR в MySQL. Принимает теже параметры, что и where() | |
whereBetween('votes', [1, 100]) | Оператор BETWEEN в MySQL. Проверяет, что значения находятся в указанном интервале | |
whereNotBetween('votes', [1, 100]) | Проверяет, что значения находятся вне указанного интервала | |
whereIn('id', [1, 2, 3]) | Оператор IN в MySQL | |
whereNotIn('id', [1, 2, 3]) | Оператор NOT IN в MySQL | |
whereNull('updated_at') | Проверяет, что значение поля равно NULL | |
whereNotNull('updated_at') | Проверяет, что значение поля не равно NULL | |
distinct() | Только уникальные значения | |
groupBy('status') | ||
take() / limit() | LIMIT из MySQL |
Методы получения данных
Это окончательные методы для отправки запроса и получения данных, прописываются последними в формировании запроса
Метод | Описание |
first() | Получить первую модель, соответствующую условию запроса |
find() | Найти только одну запись |
findOrFail() | Если результат не найден, будет выброшено исключение. Если исключение не перехвачено то будет осуществлен переход на страницу 404 |
get() | Получить все строки |
pluck('title', 'name') | Получить массив значений одного или нескольких полей. Параметрами передаются имена полей |
Аггрегатные методы
Также, вызываются в конце запроса и предназначены для получения данных, но уже с конкретными условиями
Метод | Описание |
count() |
Получить подсчитанное количество результатов |
min() | Получить минимальное значение из выборки |
max() | Получить максимальное значение из выборки |
avg() | Получить среднее значение из выборки |
sum() | Получить сумму значений в выборке |
Методы внесения/обновления данных
Метод | Описание |
save() | Сохраняет данные в БД. |
updateOrCreate() | Обновляет существующую запись, а при ее отсутствии создает новую |
Методы удаления данных
Метод | Описание |
delete() | Удаляет существующий элемент |
destroy() | Удаляет существующий элемент по первичному ключу (id) |
Примеры получения данных
1. Получить все записи
<?php
$posts = Posts::all();
2. Получить 10 последних записей.
<?php
$posts = Posts::where('published', 1)
->orderByDesc('publishedon')
->take(10)
->get();
Примеры внесения данных
1. Добавить строку в БД на основе данных
public function store(Request $request)
{
// Валидация запроса ...
$post = new Post;
$post->name = $request->title;
$post->save();
}
Примечание. Временные метки
timestamps
устанавливаются автоматически, если они не были исключены в модели.
2. Альтернативный метод create() для внесения данных
$post = Post::create([
'title' => 'Test title',
]);
Примечание. При использовании этого метода, в модели должно быть определено свойство
$fillable
или$guarded
во избежание массового присвоения.
Примеры обновления данных
public function update (Request $request)
{
// Валидация запроса ...
$post= Post::find(1);
$post->title = $request->title;
$post->save();
}
Коллекции
При получении данных из базы возвращается экземпляр класса Illuminate\Database\Eloquent\Collection
.
Методы
1. reject();
Обходит все элементы и убирает из выборки те, на которых callback-функция вернула true. Таким образом, можно убирать из коллекции элементы, основываясь на значении полей в базе.
<?php
$posts = Posts::where('published', 1)->get();
$posts = $posts->reject(function($post) {
return $post->hide_in_menu;
});