【问题标题】:Automatically set attributes using Laravel Eloquent使用 Laravel Eloquent 自动设置属性
【发布时间】:2020-05-11 04:36:27
【问题描述】:

我有一些属性,需要在使用create()save() 方法时自动设置。

型号:

class SampleModel extends Model
{
    protected $guarded = ['id'];

    public function setRandomColumnAttribute($value=null)
    {
        if(!is_string($hostname)){
            $value = "I set the value here";
        }

        $this->attributes['random_column'] = $value;
    }
}

控制器

use App\SampleModel;

class SomeController extends Controller
{
    public function something()
    {
        SampleModel::create([
            'name' => 'Jeff',
        ]);

        // or instead of the above:
        // $model = new SampleModel;
        // $model->name = 'Jeff';
        // $model->save();
    }
}

我需要保存 random_column 值,如您所见,该值在模型本身中定义,而不是从控制器传递。

如果我使用请注意:

    SampleModel::create([
        'name'          => 'Jeff',
        'random_column' => true // or anything other than string
    ]);

它可以工作并设置值,但是有什么方法可以避免每次都通过它并在模型中自动设置它?

【问题讨论】:

    标签: php laravel eloquent model


    【解决方案1】:

    你试过观察者吗?将boot() 方法添加到您的SampleModel

    protected static function boot()
    {
        parent::boot();
        static::creating(function (SampleModel $model) {
            $model->random_column = 'Random column';
        });
    }
    

    每次在 SampleModel 上调用 ->create() 时都会触发创建。

    【讨论】:

    • 谢谢,$model->save() 我遇到了这个错误:Maximum function nesting level of '256' reached, aborting! 但现在你删除了它,它工作得很好!
    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2013-09-15
    • 2017-04-29
    • 2014-06-17
    • 1970-01-01
    相关资源
    最近更新 更多