【问题标题】:How to set default attribute values in a laravel 4 model [duplicate]如何在 laravel 4 模型中设置默认属性值 [重复]
【发布时间】:2014-08-17 07:51:00
【问题描述】:

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

如果该字段为 NULL,我想将其设置为“default_image.jpg”。该图像通过许多控制器在许多页面上被引用,因此我只希望在检索时将值设为默认值。

谁能告诉我怎么做。

【问题讨论】:

  • 我看过那个帖子,但我无法让它以这种方式工作 - 不知道我做错了什么。

标签: php laravel-4 eloquent


【解决方案1】:

Accessors are what you are looking for。顾名思义,只要您尝试访问 eloquent 模型上的某个属性,就会调用访问器。

<?php

class MyModel extends Eloquent {

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

        return $value;
    }

}

更新:

仅出于说明原因:当您尝试访问类中不存在的属性时,PHP 会调用 __get() 魔术方法(如果确实存在),而不是抱怨。

Eloquent 的工作方式完全相同。当 __call() 被调用时(记住,你在 eloquent 模型上调用的属性并不真正存在)laravel 会给你数据库中那个字段的值。诀窍就在这里。

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

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

这就是魔术背后的全部技巧,并再次显示了 laravel 源的结构良好。

【讨论】:

  • 也就是说我每次都要调用getImageAttribute?
  • @Joe 不。访问器是自动的。每次您尝试访问该模型上的属性时,laravel 都会自动调用它们。您只需要实现该访问器,就可以继续使用$mymodelinstance-&gt;image
  • 你的意思是 $mymodelinstance->getImageAttribute ?
  • @Joe 不,您只是按照习惯访问您的财产。这就是访问器和修改器的酷炫之处:)
  • 好的,我明白了...谢谢托马斯! :)
猜你喜欢
  • 2017-02-16
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多