Larabel 5 - 조건부로 변수 추가
몇 마디 전에
모델 어레이 및 json 표현에 변수를 추가할 수 있습니다.protected $appends = ["your", "vars", "here"];
어레이. 단, 다음과 같은 상황을 상상해 보십시오.
상황
가상 게임 또는 이와 유사한 사용 사례가 될 수 있습니다.
예를 들어,User
전체 이름, 주소 등과 같은 (인간) 사용자에 대한 간단한 정보를 저장하는 모델입니다.
자, 여기도 있습니다.Faction
파벌/파벌/파벌/...를 대표하는 모델를 참조해 주세요.
그Faction
사용자 정보를 표시할 때 거의 매번 파벌 이름이 필요하기 때문에 사용자 검색 시 모델이 빠르게 로드됩니다.
A User
또한 가지고 있다DailyStatistics
일별 점수에 대한 정보를 담고 있습니다(점수면 충분합니다).
더 클루
사용자 포인트의 합계인 파벌의 포인트를 알고 싶기 때문에 새로운 변수를 추가할까 생각했습니다.totalPoints
.
그getTotalPointsAttribute
함수는 다음과 같습니다.
function getTotalPointsAttribute(){
return $this->users->sum->getTotalPoints();
}
문제
지금 사용자를 취득할 때마다 부하가 높은 파벌은 다음 값을 계산하려고 합니다.totalPoints
기여하다.즉, 사용자 1인당 오버헤드가 많은 것입니다.
질문
이런 상황을 피할 수 있는 방법이 있을까요?변수를 "조건부로" 추가할 수 있습니까?속성을 숨길 때 계산됩니까?
그래서 제가 포장하려고 했는데totalPoints
단순한 함수로 변수를 지정합니다.문제는 VueJ와 같은 프런트 엔드 프레임워크에서는totalPoints
variable(또는 엔드포인트에 해당 값을 가져오지만 이 솔루션이 가장 바람직하지 않음)
이 문제는 바로 추가하고 싶었지만 다른 컨트롤러/모델에 자동으로 추가되는 것을 원하지 않았기 때문에 발생하였습니다(다른 방법은 동일한 테이블에 대해 2개의 모델을 제작하는 것입니다. 유지보수가 어렵습니다).
현재 Larabel 5.4를 유지하고 있습니다(PHP5.6을 PHP7로 업그레이드하지 않기 때문에).
Larabel 5.4 이하인 경우
쿼리 작성기 get() 완료 후 마감을 추가합니다.
->each(function ($items) {
$items->append('TotalPoints');
);
오리지널 솔루션 출처: larabel-how-to-ignore-accessor
$openOrders = Order::open()->has('contents')
->get(['id','date','tableName'])
->each(function ($items) {
$items->append('TotalPoints');
);
현재 모델에는
public function getTotalPointsAttribute()
{
return $this->users->sum->getTotalPoints();
}
이제 모델 내의 추가 항목을 삭제/주석할 수 있습니다.
protected $appends = [
'TotalPoints',
];
또는 Larabel 5.5 이상을 사용하는 경우 다음과 같이 수집 매직을 사용할 수 있습니다.
$openOrders->each->setAppends(['TotalPoints']);
Larabel 5.5 이후는 Larabel 5.6 #런타임에 추가
언급URL : https://stackoverflow.com/questions/44741439/laravel-5-conditionally-append-variables
'programing' 카테고리의 다른 글
#define 디렉티브를 통해 LLVM과 해당 버전을 감지하는 방법은 무엇입니까? (0) | 2022.05.31 |
---|---|
Vuejs에서 vuex Store로 데이터를 전달하는 방법 (0) | 2022.05.31 |
maven에서 Java 버전 지정 - 속성과 컴파일러 플러그인의 차이점 (0) | 2022.05.31 |
Vue js - 이미지 소스를 찾을 수 없을 때 alt 이미지 설정 (0) | 2022.05.31 |
Java 8 JDK를 사용하여 Itable을 스트림으로 변환 (0) | 2022.05.31 |