Как расширить заполняемые поля модели PHP Laravel в дочернем классе? - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь расширить модель extintig ˙PHP` Laravel некоторыми другими полями, но не нашел подходящего решения. Я использую PHP 7.1 с Laravel 6.2

Вот мой код, который объясняет, что я хочу сделать.

Исходная модель:

<?php
namespace App;

use App\Scopes\VersionControlScope;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $fillable = [
        'product_id',
        'name',
        'unit',
        // ...
    }

    // ... relations, custom complex functions are here
}

И как я представлял, как расширить исходную модель:

<?php
namespace App;

class ProductBackup extends Product
{
    protected $fillable = array_merge(
        parent::$fillable,
        [
            'date_of_backup',
        ]
    );

    // ...
}

Но теперь я получаю сообщение об ошибке Constant expression contains invalid operations.

Могу ли я расширить массив shomehow $fillable моей исходной модели в дочернем классе ?

1 Ответ

1 голос
/ 28 мая 2020

В конструкторе вашего подкласса вы можете использовать метод mergeFillable из трейта Illuminate\Database\Eloquent\Concerns\GuardsAttributes (автоматически доступен для каждой модели Eloquent).

/**
     * Create a new Eloquent model instance.
     *
     * @param  array  $attributes
     * @return void
     */
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->mergeFillable(['date_of_backup']);
    }
...