Я использую Laravel 5.6, и я хочу сделать такой аксессуар в своей служебной модели
public function getRekomtekDateAttribute($value)
{
return $value->format('d-m-Y');
}
но когда я вызываю {{ $utility->rekomtek_date }}, отображается ошибка, как в заголовке.
Я добавил эту строчку в ту же модель, что и в Ошибка Laravel: вызов функции-члена format () в строке, но все равно не повезло
/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = [
'rekomtek_date'
];
я не знаю что не так. так как я использовал Laravel 5.3, это всегда происходит -_- '
да, я использую $table->date('rekomtek_date'); при миграции






Это потому, что вы пытаетесь использовать format () в строке. Ты должен сделать:
use Carbon\Carbon;
...
public function getRekomtekDateAttribute($value)
{
return Carbon::parse($value)->format('d-m-Y');
}
Сначала вы можете прочитать немного в документации: laravel.com/docs/5.7/eloquent-mutators#date-mutators добавляет поле в массив $ates, которое передает его экземпляру Carbon. Что-то еще не так, это не решение.
@navok Да, НО преобразование в экземпляр Carbon вступает в силу при попытке доступа к объекту. Например. $ user-> my_date вернет экземпляр Carbon. Но при извлечении внутри аксессора это еще не экземпляр Carbon.
Его использование неверно, посмотрите на мой ответ. Работает на 100%. Я так много раз этим пользовался.
Вы не должны передавать $value в функцию получения, используйте его так:
public function getRekomtekDateAttribute()
{
return $this->rekomtek_date->format('d-m-Y');
}
но почему в здесь в части «Определение средства доступа» говорится, что мы определяем средство доступа с помощью этой переменной $ value
@BangFady Да, он хорошо работает со строковым типом, но для даты преобразование в Carbon происходит, когда вы обращаетесь к родительскому элементу поля. Таким образом, ваша ошибка не говорит о том, что $value пуст или имеет значение NULL, но на самом деле он имеет тип String, а строка не имеет метода форматирования.
есть ваш
rekomtek_dateтипа DATE в БД? Попробуйте выгрузить$valueперед форматированием и убедитесь, что это тип Carbon.