Laravel Mutators中的访问模型属性

时间:2016-03-11 15:46:40

标签: laravel mutators

我想将created_at日期转换为波斯日期。所以我实现了getCreatedAtAttribute函数来做到这一点。因为我只想在特殊情况下转换日期,所以我在模型中声明了$convert_dates属性,默认值为false

class Posts extends Model {
    public $convert_dates = false;

    /**
     * Always capitalize the first name when we retrieve it
     */
    public function getCreatedAtAttribute($value) {
        return $this->convert_dates? convert_date($value): $value;
    }
}

$Model = new Posts;
$Model->convert_dates = true;

$post = $Model->first();

echo $post->created_at; // Isn't converted because $convert_dates is false

正如您在上面的代码中看到的那样,似乎模型属性将在mutators中重新初始化,因此$convert_dates的值始终为false

还有其他技巧或解决方案可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这样你可以设置构造函数。

public function __construct($value = null, array $attributes = array())
{
    $this->convert_dates = $value;

    parent::__construct($attributes);
}

现在您可以在mutator中访问此值。

 public function getCreatedAtAttribute($value) 
 {
    return $this->convert_dates ? convert_date($value) : $value;
 }

像这样填充受保护的可填充数组:

class DataModel extends Eloquent 
{
    protected $fillable = array('convert_dates');
}

然后将模型初始化为:

$dataModel = new DataModel(array(
    'convert_dates' => true
));