Поле автозаполнения в модели Laravel? - PullRequest
0 голосов
/ 27 августа 2018

В моем приложении laravel простой красноречивый вызов генерирует новый идентификатор для нового элемента в моей таблице.$Article = new Article;

Если бы я хотел одновременно создать собственный код, как бы я это сделал?

Я попробовал это:

protected $fillable = [
'RandomReference' => substr(md5(rand()), 0, 7),
...

, но получаюэта ошибка: Constant expression contains invalid operations

Не помогает, если я сделаю его защищенным полем (а не заполняемым).

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Это можно сделать с помощью Mutator , и я считаю, что это самый ларавелитский подход.

Добавьте в свою модель Eloquent следующее:

public function setRandomReferenceAttribute()
{
    $this->attributes['RandomReference'] = substr(md5(rand()), 0, 7);
}

Пожалуйста, ищите подробности в официальных документах:

https://laravel.com/docs/5.6/eloquent-mutators#defining-a-mutator

0 голосов
/ 27 августа 2018

Атрибут fillable ожидает список имен атрибутов.Вы не сможете передать динамический вызов для создания данных для этих атрибутов.

Вы можете использовать метод boot для автоматической генерации атрибута при создании события.

protected $fillable = [
  'RandomReference', /* ... */
];

public static function boot()
{
    parent::boot();

    static::creating(function ($model) {

        $model->RandomReference = substr(md5(rand()), 0, 7);

    });
}

См. эта ссылка для дополнительных примеров.

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