我有一个问题,这似乎是合乎逻辑的,但我找不到答案。 假设我有模型任务:
class Task extends Eloquent {
protected $fillable = array('is_done');
}
所以,我有一个属性is_done
,但是在处理应用程序的前端和后端部分时,我想将isDone
作为模型属性。
有没有办法说它到框架,以某种方式为我重新打包?因此,我可以在整个应用程序中使用isDone
,并且在保存/更新时,该模型负责将其转换为is_done
。
这对我有帮助,所以我不必考虑数据库中指定的名称(比如在传统的SQL子句中使用别名)。
这有可能吗?它有意义吗?
答案 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需要属性魔术方法的属性映射器;)