【发布时间】:2018-01-17 21:20:42
【问题描述】:
我有一个不工作的 mutator,我已经查看了这里,尝试了一些建议,但似乎没有任何东西可以让它工作。
这是我的模型:
...
protected $fillable = [
'energy_types'
];
...
public function getEnergyTypesAttribute($value)
{
$types = explode(',', $value);
$fuels = array();
foreach($types as $type){
switch ($type){
case '2':
$fuelType = 'Gas (Reticulated)';
break;
case '3':
$fuelType = 'Gas (Bottled)';
break;
default:
$fuelType = 'Electricity';
}
$fuels[] = array( "id" => $type,
"name" => $fuelType);
}
return $fuels;
}
这样存储在数据库中:
energy_types
1
1,2
1
控制器:
if($participant->isRetailer){
$retail = Retailer::find($participant->id);
$participant->energyTypes = $retail->energy_types;
如果我在这里转储 $retail,energy_types 仍然是这样:
["energy_types"]=>
string(3) "1,2"
我尝试更改获取$retail的方式,重新迁移,甚至尝试设置属性(也不起作用)。
我做错了什么?
【问题讨论】:
-
If I do a dump here- 你在扔什么?$retail型号?energy_types是数据库中的属性,还是非属性的 getter? -
例如如果我做 var_dump($retail)。 energy_types 是数据库中的一列。我希望每次出现时都将值转换为您在上面看到的数组。
-
您可以尝试将访问器更改为简单地返回
return 'test';并查看它是否被调用?转储$retail并访问$retail->energy_types -
@fubar 似乎正在工作,我刚刚尝试过 $retail->energy_types 它正在返回我想要的。真的不知道这里发生了什么以及为什么它神奇地工作
-
你的方法现在是否也有效,或者只是
return 'test'?转储值是否有效,还是仅直接访问它?
标签: php laravel-5.4 laravel-eloquent mutators