laravel 设置属性不会附加到 json 键

laravel set attribute won't append to json key

我有一个循环设置一些 json 值。

 if (isset($product->customfields)) {
            foreach ($product->customfields as $customfield) {
                $fieldId = $customfield['custom_field_id'];
                // Grab custom field template code
                $field = CustomField::find($fieldId);

                $product->attributes['display_name'] = $field->display_name;

            }
}

我要添加的显示名称在这里

$product->attributes['display_name'] = $field->display_name;

在我的转储中,我可以看到 json 这样的

 "id":"20",
 "display_name":"Size",
   "customfields":[  
      {  
         "id":"1",
         "product_id":"20",
         "store_id":null,
         "custom_field_id":"1",
         "value":"RED",
         "created_at":"2016-09-14 09:32:00",
         "updated_at":"2016-09-14 09:32:14"
      },

但是当我尝试更改为其中之一时

 $product->attributes['customfields']['display_name'] = $field->display_name;


 $product->attributes['customfields'] = $field->display_name;

我刚明白这个

"id":"20",
"customfields":[  
      {  
         "id":"1",
         "product_id":"20",
         "store_id":null,
         "custom_field_id":"1",
         "value":"RED",
         "created_at":"2016-09-14 09:32:00",
         "updated_at":"2016-09-14 09:32:14"
      },

如何设置要添加到自定义字段键的属性?

编辑:

完整文件http://kopy.io/LQTDi

感谢@Manish 的建议

$product->customfields-['display_name'] = $field->display_name;

现在returns

"customfields":{  
      "0":{  
         "id":"1",
         "product_id":"10000",
         "store_id":null,
         "custom_field_id":"1",
         "value":"RED",
         "created_at":"2016-09-14 09:32:00",
         "updated_at":"2016-09-14 09:32:14"
      },
      "1":{  
         "id":"2",
         "product_id":"10000",
         "store_id":null,
         "custom_field_id":"2",
         "value":"",
         "created_at":"2016-09-14 10:22:14",
         "updated_at":"2016-09-14 10:22:14"
      },
      "display_name":"Size"
   },

但是在自定义显示名称中有两个字段,分别是尺寸和颜色。我想我可能需要制作一个新循环并循环 display_name 。如果是这种情况,请告知,我会这样做。

@ServerSideSkittles 也许我明白你的意思了。可能是我错了,但根据你的详细信息,我认为你需要这个。

if (isset($product->customfields)) {

                foreach ($product->customfields as $customfieldKey => $customfieldVal) {
                    $fieldId = $customfieldVal['custom_field_id'];
                    // Grab custom field template code
                    $field = CustomField::find($fieldId);

                    $product->customfields[$customfieldKey]['display_name'] = $field->display_name;
                }
    }

试试这个。也许这会解决问题。

我知道这很旧,但是this answer your question吗?

$product->setAttribute ('customfields->display_name', 'Display name of my column');

但是,退后一步,完全绕过您的问题,有人可能会争辩说您根本不想在数据库模型中对显示名称进行硬编码。显示名称应该在您的 translation/localisation 文件中进行管理。

在您的 Blade 模板文件中,尝试:

{{ __($my_field_id) }}

然后您会在本地化文件中获得 field-id 的翻译。