laravel 设置属性不会附加到 json 键
Posted
技术标签:
【中文标题】laravel 设置属性不会附加到 json 键【英文标题】:laravel set attribute won't append to json key 【发布时间】:2017-01-22 05:00:56 【问题描述】:我有一个循环设置一些 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"
,
如何设置要添加到 customfields 键的属性?
编辑:
完整文件http://kopy.io/LQTDi
感谢@Manish 的建议
$product->customfields-['display_name'] = $field->display_name;
现在返回
"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"
,
但是在自定义显示名称中有两个字段,分别是大小和颜色。我想我可能需要创建一个新循环并循环显示名称。如果是这种情况,请建议,我会这样做。
【问题讨论】:
我很惊讶它甚至可以工作,因为Eloquent\Model
类中的attributes
属性受到保护。你应该得到错误Indirect modification of overloaded property
或类似的东西。你确定你没有抑制该代码中的任何错误吗?
出现错误。但是我使用的是 OcotberCMS,所以可能与上面的代码实际工作有关。
确实如此。 OctoberCMS 改变属性可见性github.com/octobercms/library/blob/master/src/Database/…
你试过这样$product->customfields['display_name'] = $field->display_name;
@Manish 这有点工作,它在自定义字段中添加显示名称,但不在 id“1”中。当我有多个自定义值时,它将进入自定义字段:[ “id”:1 、“id”:2 等。如何在每个对象中循环每个 display_name?
【参考方案1】:
我知道这是旧的,但this answer your question?
$product->setAttribute ('customfields->display_name', 'Display name of my column');
但是,退后一步,完全绕开您的问题,有人可能会争辩说您根本不想在数据库模型中硬编码显示名称。显示名称应该在您的翻译/本地化文件中进行管理。
在您的 Blade 模板文件中,尝试:
__($my_field_id)
然后您将在本地化文件中为您的field-id
提供翻译。
【讨论】:
【参考方案2】:@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;
试试这个。可能这会解决问题。
【讨论】:
这太棒了!我正在重新编辑我的问题,你发布了这个宝石。非常感谢,因为我没有很好地解释这个问题。以上是关于laravel 设置属性不会附加到 json 键的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 barryvdh/laravel-dompdf 将 PDF 附加到 Laravel 的电子邮件中
Jackson 不会将新的 JSON 对象附加到现有的 Json 文件中