Упрощение сводных таблиц Laravel: автоматическое добавление полей Created_at и Updated_at

Вы устали вручную добавлять поля created_atи updated_atв сводные таблицы Laravel? Не волнуйтесь! В этой статье мы рассмотрим несколько методов, которые могут автоматически добавлять эти важные поля временных меток в сводные таблицы, экономя ваше время и усилия. Итак, приступим!

Но сначала давайте кратко объясним, что такое сводные таблицы в Laravel. Сводная таблица — это промежуточная таблица, используемая для установления связей «многие ко многим» между двумя другими таблицами. Он содержит внешние ключи из обеих таблиц и может включать дополнительные столбцы, относящиеся к связи.

Теперь давайте рассмотрим несколько удобных методов автоматического добавления полей created_atи updated_atв сводные таблицы.

Метод 1: определение временных меток в сводной модели

Один простой подход — определить сводную модель для сводной таблицы. Поступив так, вы сможете воспользоваться преимуществами функций Laravel Eloquent ORM, включая автоматическую обработку меток времени. Вот пример:

use Illuminate\Database\Eloquent\Relations\Pivot;
class YourPivotModel extends Pivot
{
    public $timestamps = true;
}

В этом методе вы создаете собственную сводную модель, которая расширяет базовый класс Pivot, предоставленный Laravel. Установив для $timestampsзначение true, Laravel будет автоматически управлять полями created_atи updated_atза вас.

Метод 2: использование миграции

Если вы предпочитаете не создавать отдельную сводную модель, вы можете использовать функцию миграции Laravel, чтобы добавить поля временных меток непосредственно в сводную таблицу. Вот пример файла миграции:

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddTimestampsToYourPivotTable extends Migration
{
    public function up()
    {
        Schema::table('your_pivot_table', function (Blueprint $table) {
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::table('your_pivot_table', function (Blueprint $table) {
            $table->dropTimestamps();
        });
    }
}

Вызвав метод timestamps()в методе up()миграции, Laravel создаст created_atи updated_atполя для тебя. Метод down()позволяет при необходимости отменить изменения.

Метод 3: глобальная конфигурация

Если вы хотите применить автоматическое поведение временных меток ко всем сводным таблицам в вашем приложении, вы можете глобально настроить Eloquent для включения временных меток во все сводные модели. Откройте класс AppServiceProviderи добавьте следующий код в метод boot():

use Illuminate\Database\Eloquent\Relations\Pivot;
public function boot()
{
    Pivot::setPivotKeys(true);
    Pivot::setPivotKeys(['created_at', 'updated_at']);
}

Установив setPivotKeys(true), вы включаете автоматическую обработку временных меток во всех сводных моделях. Кроме того, setPivotKeys(['created_at', 'updated_at'])явно указывает имена столбцов временных меток.

Метод 4: шаблон наблюдателя

Другой подход — использовать шаблон наблюдателя Laravel для автоматического добавления полей временных меток в сводные таблицы. Сначала создайте класс наблюдателя, выполнив следующую команду:

php artisan make:observer YourPivotObserver

Затем откройте сгенерированный класс YourPivotObserverи добавьте следующий код:

use Illuminate\Database\Eloquent\Relations\Pivot;
class YourPivotObserver
{
    public function updating(Pivot $pivot)
    {
        $pivot->updated_at = now();
    }
    public function creating(Pivot $pivot)
    {
        $pivot->created_at = now();
        $pivot->updated_at = now();
    }
}

В этом коде метод updating()устанавливает поле updated_atпри каждом обновлении сводной таблицы, а метод creating()устанавливает оба поля updated_at. Поля >28и updated_atпри создании новой записи.

Не забудьте зарегистрировать наблюдателя в методе boot()вашего класса AppServiceProvider:

use App\Observers\YourPivotObserver;
use App\Models\YourPivotModel;
public function boot()
{
    YourPivotModel::observe(YourPivotObserver::class);
}

Вот и все! Теперь у вас есть несколько способов автоматического добавления полей created_atи updated_atв сводные таблицы Laravel. Выберите метод, который лучше всего соответствует требованиям вашего проекта, и наслаждайтесь удобством автоматической обработки меток времени.

Удачного программирования!