expression is not allowed as field default value
class 파일에서 함수 표현식을 상수로 정의하려고 했더니 위와 같은 에러메세지가 나왔다.
말 그대로 필드 기본값으로는 표현식을 쓸 수 없기 때문에 생긴 에러다.
https://stackoverflow.com/questions/54417100/expression-is-not-allowed-as-field-default-value-on-oop
https://stackoverflow.com/questions/35037368/expression-is-not-allowed-as-field-default-value
/**
* 생성자에서 프로퍼티값 선언하기
*/
__construct() {
parent::__construct();
$this->career_levels = CareerLevel::all()->pluck('name', 'id')->toArray();
}
문제점 : 인스턴스 생성시마다 디비 쿼리가 실행됨
__isset()
매직 메서드로 체크해서 해당 프로퍼티가 저장소에서 처음 사용되고, 존재하지 않을때만 디비에서 1회 가져오게 하기
https://www.php.net/manual/en/language.oop5.overloading.php#object.isset
/**
* 선언되지 않은 프로퍼티를 디비에서 가져오기
*/
public function __isset(string $name): bool
{
if ($name === 'career_levels') {
$this->career_levels = CareerLevel::all()->pluck('name', 'id')->toArray();
}
return isset($this->{$name});
}
<select id="career_levels" name="career_levels" required>
<option>{{ __('Select') }}</option>
@foreach ($careerLevels as $careerLevel)
<option value="{{ $careerLevel->id }}"
{{ __isset($careerLevel->id) ? 'selected' : '' }}>
{{ $careerLevel->name }}
</option>
@endforeach
</select>