Error: expression is not allowed as field default value


内容
expression is not allowed as field default value
classファイルでは、関数式を定数として定義しようとしましたが、上記のエラーメッセージが表示されました.
名前の通り、フィールドのデフォルト値として式を使用できないため、エラーが発生しました.
https://www.php.net/manual/en/language.oop5.constants.php
解決策
  • ジェネレータ
  • 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();
    }
    質問:インスタンスを作成するたびにDeviクエリが実行されます
  • 過負荷
  • __isset() magicメソッドをリポジトリで初めて使用し、存在しない場合にのみデバイスから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>