0

我想将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

有没有其他技巧或解决方案来解决这个问题?

4

1 回答 1

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
));
于 2016-03-11T15:57:34.197 回答