Проверьте, существует ли экземпляр модели laravel в БД в конструкторе

Есть ли способ проверить, получена ли модель Laravel из БД или создана с new команда в своем конструкторе?

Я пробовал с $this->exists но в __construct это всегда возвращается false...

Это код:

function __construct($attributes = array())
{
    parent::__construct($attributes);
    $this->testVar = $this->exists;
}

3 ответа

Из ваших комментариев я думаю, что вы хотите сделать, это добавить прослушиватель событий, который создаст ваш Element когда Aircraft создано.

Это может выглядеть так (в вашем Aircraft.php Красноречивая модель):

protected static function boot()
{
    static::created( function ($aircraft) {
        Element::create([
            'aircraft_id' => $aircraft->id,
        ]);
    });
}

Таким образом, всегда, когда вы создаете новый Aircraft через Eloquent автоматически создаст и свяжет Element,

Просто вызовите соответствующую функцию конструктора в этом классе: Constructor:

public function __construct()
    {
        $this->model = $this->checkModel();
    }

Функция сеттера:

public function checkModel()
    {
        // do your staff
    }

Есть модельные события, которые вы можете подключить, и одно специально для retrieved,

Смотрите документы по модельным событиям.

Полученное событие сработает, когда существующая модель будет извлечена из базы данных.

Другие вопросы по тегам