【问题标题】:Laravel 5.4 Mutator not workingLaravel 5.4 Mutator 不工作
【发布时间】: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;

如果我在这里转储 $retailenergy_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


【解决方案1】:

首先,Mutator 函数类似于“setEnergyTypesAttribute”。

但是,您的代码 sn-ps 显示您正在尝试定义访问器。

无论如何,如果您在从数据库中检索数据时尝试向模型添加自定义属性,请按照以下方式操作。

...
protected $appends = ['foo'];
...
public function getFooAttribute()
{
    return $this->attributes['bar'] . ' foo'; 
}

其中“bar”是模型中的原始属性。

希望对你有帮助。

【讨论】:

  • 嗨,Sem,实际上很久以前就解决了这个问题,但是很高兴回答,谢谢:)
猜你喜欢
  • 2017-10-25
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
相关资源
最近更新 更多