Laravel Eloquent Model将所有值都插入为NULL

时间:2015-01-31 11:24:55

标签: php laravel eloquent

我遇到了Laravel Eloquent Model

的问题

我有一个模型如下:

class Activity extends Eloquent {
    protected $table = 'activity';

    protected $timestamps = false;

    public $item;

    public $content;

    public $year;

    protected $fillable = array('item', 'content', 'year');
}

和相应的控制器:

class ActivityController extends \BaseController {
     public function create()
     {
         $activity = new Activity();

         $actitity->item = 'Example';
         $activity->content = 'Example content';
         $activity->year = 2015;

         $activity->save();
     }
}

上面的代码应该可以正常运行,并且“活动”表中应该有一条记录。但是,当我运行此代码时,活动表的列的所有值都将作为NULL插入(除了id列为auto_increment)。

此外,当我var_dump $活动时(在调用$ activity-> save()之前),具有所有属性的$ activity显示为预期(我的意思是,我之前已分配的值)

我的代码中是否有任何微妙的错误?

3 个答案:

答案 0 :(得分:2)

您不能将数据库字段定义为实际的类属性。问题是Laravel在内部使用$attributes数组,而不是模型属性。

做的时候

$activity->content = 'Example content';

Laravel使用魔法__set()方法更新其$attributes数组中的值。但是这个setter方法永远不会被调用,因为你有一个具有该名称的实际属性。

解决此问题需要做的是删除属性:

class Activity extends Eloquent {
    protected $table = 'activity';

    protected $timestamps = false;

    protected $fillable = array('item', 'content', 'year');
}

如果您想记录属性并拥有自动完成支持,可以使用@property注释:

/**
 * @property string $item
 * @property string $content
 * @property int $year
 */
class Activity extends Eloquent {

答案 1 :(得分:0)

这是因为Eloquent使用魔术制定者/吸气剂。如果您执行了$model->randomAttribute,那么它将查看数据的模型属性数组。

因为你已经明确定义了每个属性,所以它直接访问了属性,而不是魔术的getter。当您调用save()时,该函数会将所有数据保存在不包含任何内容的属性数组中。

删除属性定义,它将起作用。

如果你致电$model->getAttributes(),你会发现其中没有数据。

答案 2 :(得分:0)

卸下:

public $item;

public $content;

public $year;

从:

class Activity extends Eloquent {
    protected $table = 'activity';

    protected $timestamps = false;

    public $item;

    public $content;

    public $year;

    protected $fillable = array('item', 'content', 'year');
}