0

論理的に思える質問が 1 つありますが、答えが見つかりません。モデルタスクがあるとしましょう:

class Task extends Eloquent {
    protected $fillable = array('is_done');
}

というわけでプロパティは1つですが、アプリケーションのフロントエンド部分とバックエンド部分を扱う場合は、モデルプロパティとしてis_done持ちたいと思います。isDoneどういうわけか私のためにそれを再パックするために、フレームワークにそれを言う方法はありますか? isDoneそのため、アプリケーション全体でを使用でき、そのモデルはis_done保存/更新時にそれを に変換します。

これは私を助けるので、データベースで指定された名前について考える必要はありません (従来の SQL 句でエイリアスを使用する場合など)。

これはまったく可能ですか?それは理にかなっていますか?

4

2 に答える 2

1

モデルの個々の属性ごとに getter/setter メソッドを作成しないようにするには、Eloquentクラスのマジック メソッドをオーバーライドして、キャメルケース スタイルでそれらにアクセスできます。

class Model extends Eloquent {
  public function __get($key)
  {
    $snake_key = snake_case($key);
    return parent::__get($snake_key);
  }

  public function __set($key, $value)
  {
    $snake_key = snake_case($key);
    parent::__set($snake_key, $value);
  }

  public function __isset($key)
  {
    $snake_key = snake_case($key);
    return parent::__isset($snake_key);
  }

  public function __unset($key)
  {
    $snake_key = snake_case($key);
    parent::__unset($snake_key);
  }
}
于 2014-03-07T13:05:27.703 に答える
0

属性の getter メソッドは役に立ちますか? もし、そうなら:

<?php
class Task extends Eloquent {
    public function isDone()
    {
        return $this->getAttribute('is_done');
    }
}

そうでない場合、そして本当に $Task->isDone にアクセスする必要があります: $key == 'isDone' (およびおそらく他の属性) の magic _ get() メソッドで $key を上書きして、親を返すようにしてください:: _get( ) $key:

<?php
class Task extends Eloquent {
    public function __get($key)
    {
        if($key == 'isDone')
            $key = 'is_done';
        return parent::__get($key);
    }
}

そしておそらく、あなたの Eloquent には、属性マジック メソッド用の属性マッパーが必要です ;)

于 2013-10-30T12:45:24.773 に答える