내가 JSON으로이 모델을 반환 할 때, 나는 다시 다음 얻을 두 개의 데이터 속성, allowance_starts_at
및 allowance_ends_at
이있는 조직 모델을 가지고 :Laravel 오버라이드 (override)/날짜를 추가 한 속성은 JSON 출력에 연재되지 않습니다
allowance_starts_at: "2017-06-01 00:00:00",
allowance_ends_at: "2018-05-31 23:59:59",
allowance_starts_at: "2018-06-01 00:00:00",
allowance_ends_at: "2019-05-31 23:59:59",
내가 무시하고있어이를 달성하기 :
그러나 나는 내가 속성 반환 할 2018년 6월 1일 와서 현재 연도 (또는 허용 기간)로 해 설정 이러한 특성을 무시하려면 s와 같은 모델의 속성 오 : 나는 탄소 날짜는 직렬화 된 JSON으로 모델
이 작동하고 난 지금, 그러나 원하는 나에게 결과를 제공public function getAllowanceStartsAtAttribute($value)
{
$currentYear = Carbon::now()->format('Y');
$d = Carbon::createFromFormat('Y-m-d H:i:s', $value);
$d->year($currentYear);
return $d;
}
public function getAllowanceEndsAtAttribute($value)
{
$d = Carbon::createFromFormat('Y-m-d H:i:s', $value);
if ($d->copy()->subYear()->addSecond() != $this->allowance_starts_at) {
$d->addYear();
}
return $d;
}
없는 출력 할 때 :
allowance_starts_at: {
date: "2017-01-01 00:00:00.000000",
timezone_type: 3,
timezone: "Europe/London"
},
allowance_ends_at: {
date: "2017-12-31 23:59:59.000000",
timezone_type: 3,
timezone: "Europe/London"
},
또한 이것을 테스트했습니다 추가 된 속성 때문에 기존 속성을 덮어 쓰지 않고 단지 Carbon::now()
을 반환 한 추가 속성을 만들고 $ dates 배열에 추가 속성을 설정하면 같은 방식으로 출력됩니다. 즉 직렬화되지 않습니다.
Laravel이 특성을 출력하는 방법을 결정하는 사람이 있습니까? 탄소 또는 문자열로?
누구나 내가이 작업을 어떻게 할 수 있는지 알고 있습니까?
업데이트
감사 폴. 세터 뮤 테이터를 사용하여 필자에게 필요한 행동을 주었다. 나는 내 최우선의 방법을 대체 :
public function setAllowanceStartsAtAttribute($value)
{
$currentYear = Carbon::now()->format('Y');
$value->year($currentYear);
$this->attributes['allowance_starts_at'] = $value;
}
public function setAllowanceEndsAtAttribute($value)
{
if ($value->copy()->subYear()->addSecond() != $this->attributes['allowance_starts_at']) {
$value->addYear();
}
$this->attributes['allowance_ends_at'] = $value;
}
을 그리고 JSON을 반환 할 때 지금은이 출력을 얻을 :
allowance_starts_at: "2018-06-01 00:00:00",
allowance_ends_at: "2019-05-31 23:59:59",
'$ d'는 Carbon 객체이고, Carbon은 JSON으로 출력을위한 네이티브 처리 기능을 가지고 있습니다. 2019-05-31 23:59:59 "와 같은 출력을 원하면'return $ d' 대신에'return $ d-> toDateTimeString();'을 사용하십시오. – ceejayoz
네,하지만 모델이 내부적으로 사용되는 경우 Carbon 인스턴스가 필요하고 toDateTimeString 출력은 JSON에서만 필요합니다. Laravel은 created_at, updated_at 또는 $ dates 배열에 설정 한 다른 날짜에 대해 자동으로 처리하지만이 작업은 데이터베이스에 저장된 날짜에만 작동하며 모델 자체의 특성으로 설정된 날짜에는 작동하지 않는 것으로 보입니다. –
잔인 함처럼 보이지만 API 리소스가 효과적 일 수 있습니다. – Nartub