2016-03-11 2 views
0

Я хочу конвертировать created_at даты в Персидский. Поэтому я применил функцию getCreatedAtAttribute для этого. Поскольку я просто хочу преобразовать даты в особых ситуациях, я объявил $convert_dates свойство в модели со значением по умолчанию false.Доступ к модели собственности в Laravel Мутаторы

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; 
} 

ИЛИ

Заполните защищенный заполняемый массив так:

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

Затем инициализирует модель как:

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

Это не работает. Вы протестировали его? – Omid

+0

Да и его работа. –

+0

$ post = Сообщения :: first(); $ post-> convert_dates = true; –