автоматически присваивать значение полю в модели laravel - PullRequest
1 голос
/ 24 марта 2020

Я работаю с laravel, и в одной из моих моделей мне нужно автоматически присваивать значение полю (типа date) каждый раз, когда создается запись, так как я только начинаю с laravel, я делаю не делайте этого, так как я пытаюсь использовать мутатор:

public function setApprovedDateAttribute($date)
{
    $this->attributes['approved_date'] = Carbon::now()->format('Y-m-d');
}

, но он не работает для меня, потому что я думаю, что мутатор, как его имя говорит, меняет значение, которое я посылаю для этого поля , в моем случае мне нужно добавлять один автоматически каждый раз, когда я создаю новую запись, так как я могу это сделать?

1 Ответ

2 голосов
/ 25 марта 2020

Как упомянуто в комментарии @apokryfos, лучше всего сделать это вместо создания события. Вот что вы должны сделать, скажем, ваша таблица subscriptions с полем subscriptions.approved_date и модель Subscription, вот очень чистый способ, которым вы можете сделать для достижения выданного результата:

1. php artisan make:observer SubscriptionObserver --model=Subscription

<?php

namespace App\Observers;

use App\Subscription;
use Carbon\Carbon;

class SubscriptionObserver
{
    /**
     * Handle the subscription "creating" event.
     *
     * @param Subscription $subscription
     * @return void
     */
    public function creating(Subscription $subscription)
    {
        $subscription->approved_date = Carbon::now()->format('Y-m-d');
    }
}

Примечание. Я добавил метод creating(), по умолчанию его нет.

2. php artisan make:provider SubscriptionServiceProvider

<?php

namespace App\Providers;

use App\Observers\SubscriptionObserver;
use App\Subscription;
use Illuminate\Support\ServiceProvider;

class SubscriptionServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        Subscription::observe(SubscriptionObserver::class);
    }
}

Строка уведомления в методе boot().

3. Включите провайдера в список config/app.php

<?php

return [

    // other elements

    /*
    |------------------------------
    | Autoloaded Service Providers
    |------------------------------
    |
    | The service providers listed here will be automatically loaded on the
    | request to your application. Feel free to add your own services to
    | this array to grant expanded functionality to your applications.
    |
    */

    'providers' => [

        // other providers

        App\Providers\SubscriptionServiceProvider::class,

    ],
];

Все это можно пропустить и сделать в методе boot() модели, но указанный способ проще для меня поддерживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...