0

我有一个问题,这似乎是合乎逻辑的,但我找不到答案。假设我有模型任务:

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

所以,我有一个属性is_done,但是在处理应用程序的前端和后端部分时,我想拥有一个isDone模型属性。有没有办法对框架说,以某种方式为我重新打包?这样我就可以isDone在整个应用程序中使用 , 并且该模型在is_done保存/更新时负责将其转换为 。

这会对我有所帮助,因此我不必考虑数据库中指定的名称(例如在传统 SQL 子句中使用别名时)。

这可能吗?是否有意义?

4

2 回答 2

1

为了防止为模型的每个属性编写 getter/setter 方法,您可以覆盖Eloquent类中的魔术方法以以 camelCase 样式访问它们:

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' (可能还有其他属性)的魔法 _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 回答