2016-03-11 119 views
0

我想將created_at日期轉換爲波斯日期。所以我實現了getCreatedAtAttribute函數來做到這一點。因爲我只想在特殊情況下轉換日期,所以我在模型中聲明$convert_dates屬性,默認值爲false在Laravel Mutators中訪問模型屬性

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 

正如你在代碼見上面,看來模特屬性將重新初始的變異符這樣的$convert_dates值始終false

有沒有其他技巧或解決方案來解決這個問題?

+0

設置一個構造函數來設置的'價值convert_dates' –

回答

0

這樣你可以設置構造函數。

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

    parent::__construct($attributes); 
} 

現在你可以在你的突變訪問此值。

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

OR

填充保護可填寫的數組是這樣的:

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

然後初始化型號爲:

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

它不工作。你測試過了嗎? – Omid

+0

是的,它的工作。 –

+0

$ post = Posts :: first(); $ post-> converted_dates = true; –