检索Laravel中的可填写字段

问题描述 投票:3回答:3

在laravel 5.4中,我能够通过使用模型实例的fillable索引来检索可填充字段。

$model = new AnyClass();
dd($model['fillable']);

上面的代码打印了AnyClass的所有可填写字段。但是相同的代码在laravel 5.6上打印null。我知道我可以使用$model->getFillable()检索可填写的字段。我的问题是什么原因/为什么它不在laravel 5.6中工作但在5.4中工作?

php laravel laravel-5 eloquent laravel-5.6
3个回答
2
投票

如果你看一下Laravel的源代码,你会看到差异。

Model类由应用程序模型扩展,实现了ArrayAccess接口,该接口强制类定义offsetGet方法。

在Laravel 5.4中,offsetGet方法如下所示:

public function offsetGet($offset)
{
    return $this->$offset;
}

这意味着如果你调用$model['fillable'],你实际上调用$model->offsetGet('fillable')实际上返回类的fillable属性。

我找不到Laravel 5.6标签,但我很确定它与Laravel 5.5.45的代码相同。在这个版本中,offsetGet方法改为:

public function offsetGet($offset)
{
    return $this->getAttribute($offset);
}

这意味着它实际上返回了找到的属性,否则返回null。


4
投票

从升级指南here我相信这是问题的答案:

模型方法和属性名称

为了防止在使用数组访问时访问模型的私有属性,不再可能使用与属性或属性同名的模型方法。这样做会在通过数组访问($user['name'])或data_get辅助函数访问模型的属性时引发异常。


0
投票

将类中的属性更改为public $fillable = [而不是protected $fillable = [

© www.soinside.com 2019 - 2024. All rights reserved.