Модели

12 Ноября 2022 00:04

Модели расширяют класс 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';
}

Примеры получения данных

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();
}