Laravel 4 - 模型属性的名称与数据库列不同

时间:2013-10-30 11:00:39

标签: laravel-4 eloquent

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

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

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

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

这有可能吗?它有意义吗?

2 个答案:

答案 0 :(得分: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);
  }
}

答案 1 :(得分:0)

您的属性的getter方法会对您有所帮助吗?如果是的话:

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

如果没有,你真的需要访问$ Task-&gt; isDone:尝试用$ key =='isDone'(可能还有其他属性)覆盖magic _ get()方法中的$ key使用$ key:

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

也许,您的Eloquent需要属性魔术方法的属性映射器;)