Laravel 5.2:名称上带有驼峰式大小写的列上的访问器

时间:2018-07-18 15:12:20

标签: laravel

我试图在检索时使用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
}

1 个答案:

答案 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