拉拉维尔的填充方法不起作用?

2022-08-30 19:38:21

我正在学习如何使用Laravel框架,但我在填充模型时遇到了麻烦。这是我的代码:

型号:Event

<?php
class Event extends Eloquent {
  //Some functions not used yet
}

这是控制器中的代码:

$event = new Event();
$event->fill(array('foo', 'bar'));
print_r($event->attributes);

那么,为什么显示一个空数组呢?print_r


答案 1

这些属性是受保护的属性。使用 $obj->getAttributes() 方法。

实际上。首先,您应该将模型名称从更改为其他名称,具有一个类,因此这可能是一个问题。EventLaravelFacadeIlluminate\Support\Facades\Event

关于方法,您应该将关联数组传递给方法,如下所示:fillfill

$obj = new MyModel;
$obj->fill(array('fieldname1' => 'value', 'fieldname2' => 'value'));

还要确保在中声明了(检查批量分配)属性,其中包含允许填充的属性名称。在初始化 时,您也可以执行相同的操作:protected $fillableModelModel

$properties = array('fieldname1' => 'value', 'fieldname2' => 'value');
$obj = new ModelName($properties);

最后,调用:

// Instead of attributes
dd($obj->getAttributes());

因为是受保护的属性。attributes


答案 2

还要确保在模型类中定义了该属性。例如,在新重命名的模型中:$fillable

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['field1', 'field2'];

如果模型上没有定义任何一个值,则不会设置任何值。这是为了防止模型进行质量分配。参见Laravel Eloquent docs上的“Mass Assignment”:http://laravel.com/docs/5.1/eloquent$fillable$guardedfill()

填充属性时,请确保使用关联数组:

$event->fill(array('field1' => 'val1', 'field2' => 'val2'));

调试和检查所有值的有用方法:

//This will var_dump the variable's data and exit the function so no other code is executed
dd($event);

希望这有帮助!


推荐