我试图在检索时使用laravel访问器来修改列的内容。我这样做是这样的:
在我的模特上:
public function getMyColumnAttribute($value)
{
//Modify the content
return $value.'tttt';
}
在我的控制器上:
public function test()
{
return MyModel::select('my_column')->find(1);
}
当数据库中的列名为“ my_column”时,此方法非常有效,但是我的整个数据库使用驼峰式大小写,因此该列的实际名称为myColumn,而访问器在这种情况下不起作用,我的意思是返回我的列的值,但是没有修改我在访问器中所做的。我认为这一定是一种方法,但是我找不到方法。
感谢您的帮助
编辑
我只是意识到,尽管这行不通:(myColumn在MySql DB上的类型为time)
public function test()
{
return MyColumn::select('myColumn')->find(1);
//returns {"myColumn":"08:00:00"}
}
这完全符合我的预期
public function test()
{
$result = MyColumn::select('myColumn')->find(1);
return $result->myColumn;
// returns 08:00:00tttt
}
答案 0 :(得分:0)
访问器不会修改列原始数据,而是用于创建新属性
使用Mutator,将修改后的原始数据保存到db
使用Accessor,获取原始数据并对其进行修改并分配给新属性
以您的情况
public function getMyColumnAttribute()
{
//Modify the content
return $this->attributes['type_column_name_here'] . 'tttt';
}
public function test()
{
// myColumn = the column name
$result = MyColumn::select('myColumn')->find(1);
// this is return the column value 08:00:00
return $result->myColumn;
// this will return accessor value 08:00:00tttt
return $result->my_column;
}
获取MyColumn
属性将转换为my_column