如何在laravel 4模型中设置默认属性值

时间:2014-06-26 12:43:01

标签: php laravel-4 eloquent

我有一个从数据库中检索到的字段,其中包含图像的文件名。

如果该字段为NULL,我想将其设置为' default_image.jpg'。这个图像通过许多控制器在许多页面上被引用,所以我只想在获取时将值设置为默认值。

有人可以告诉我该怎么做。

1 个答案:

答案 0 :(得分:4)

Accessors are what you are looking for。正如名称所示,只要您尝试访问雄辩模型上的某个属性,就会调用Accessors。

<?php

class MyModel extends Eloquent {

    public function getImageAttribute($value)
    {
        if(is_null($value))
            return 'default_image.jpg';

        return $value;
    }

}

<强>更新

只是为了澄清原因:当您尝试访问类中不存在的属性时,PHP会调用__get()魔术方法(如果确实存在),而不是抱怨。

Eloquent以同样的方式工作。当调用__call()时(请记住,您在一个雄辩模型上调用的属性并不存在)laravel将为您提供数据库中该字段的值。诀窍在这里。

在雄辩的模型上调用__get()方法时。 Eloquent会调用它的getAttribute()方法来获取属性,但会事先检查访问者是否存在(在laravel源访问器中称为 get mutators )。你可以看到它here

如果是这种情况,laravel会调用给定密钥上的mutateAttribute()方法。然后mutateAttribute()将最终调用getXAttributesource),其中X是要访问的属性的名称。

这就是魔术背后的全部技巧,再次展示了结构化的层次结构的来源。