我正在使用Laravel 5.4中的Eloquent模型。
在文档中,我看到:
“您还可以使用create方法在单个行中保存新模型。该方法将返回已插入的模型实例给您。但是,在执行此操作之前,您需要在模型上指定fillable或guarded属性,因为默认情况下所有Eloquent模型都会保护免受大规模分配攻击。”
“您还可以使用create方法在单个行中保存新模型。该方法将返回已插入的模型实例给您。但是,在执行此操作之前,您需要在模型上指定fillable或guarded属性,因为默认情况下所有Eloquent模型都会保护免受大规模分配攻击。”
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Flight extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name'];
}
然而,$fillable属性已在所有模型中使用的trait中定义:
trait GuardsAttributes
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [];
...
关于Traits属性,PHP文档已经明确说明:
如果一个Trait定义了一个属性,则类不能定义一个同名的属性,否则会发生错误。如果类的定义与Trait的属性兼容(具有相同的可见性和初始值),则会产生E_STRICT错误,否则将导致致命错误。
Laravel文档对建议实现有误吗?
A
,并在其中使用了一个 trait。Trait = 语言辅助复制粘贴。类A
不能包含protected $fillable
- 它确实没有,因为你的类A
是Illuminate\Database\Eloquent\Model
。到目前为止一切正常 - 但现在你正在扩展Model
,并且可以覆盖protected $fillable
属性。继承规则允许这样做。你的问题是合理的,但文档中的两个摘录也是如此。 - Mjh