Laravel通过trait使用数据库列设置$fillable

dwthyt8l  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(194)

我正在尝试创建一个trait,它将根据模型表模式自动设置$fillable

trait DynamicFillable
{
    public static function bootDynamicFillableTrait()
    {
        static::retrieved(function (Model $model) {
            $model->fillable(Schema::getColumnListing($model->getTable()));
        });
    }
}

我也试过:

static::retrieved(function (Model $model) {
    $model->fillable = Schema::getColumnListing($model->getTable());
});

这也不起作用,因为$fillable受到保护。
这可能吗?如果可能,怎么可能?

kulphzqa

kulphzqa1#

我想我明白了:

trait DynamicFillable
{
    public function getFillable()
    {
        return Schema::getColumnListing($this->getTable());
    }
}
9o685dep

9o685dep2#

我只是想知道,如果你计划让你表中的所有字段都是可填充的,为什么在创建代码时会遇到问题呢?
你能不能写上:

protected $guarded = [];

在你的模型上?
只是一个想法。

euoag5mw

euoag5mw3#

我很欣赏这是一个老问题,但对于那些谷歌这个问题在未来;
正如@stardust4891所指出的,你可以覆盖trait中的getFillable()函数。然而,这可能会使你的trait不能很好地与其他trait或你所做的自定义匹配。
相反,你可以使用trait intialization。在你的特质中,你可以做以下事情:

<?php

namespace App\Models\Traits;

trait AddToFillableExample
{
    
    /**
     * Initialize the trait
     *
     * @return void
     */
    protected function initializeAddToFillableExample()
    {
        $this->fillable[] = 'my_custom_field';
    }
}

相关问题