【发布时间】:2015-08-28 22:26:32
【问题描述】:
我有一个包含多个字段的模型,包括两个存储 JSON 字典列表的文本字段。其中一个存储图像数据的工作正常;但是,当我尝试从刀片模板访问该属性时,第二个存储带有链接的字典列表会返回 Undefined property: stdClass::$title。
如果我删除对我的链接属性的调用,所有其他属性(包括转换为对象数组的图像 JSON)都可以正常呈现。
我尝试dd() links 属性,它都显示它已设置,它是一个数组,并且它充满了具有我在失败时尝试访问的属性(标题、url)的对象.
但是,一旦我尝试实际访问它们,我就会得到 Undefined property 以获取我尝试访问的确切属性。
想知道有没有人遇到过这样的事情?真正奇怪的是,图像 JSON 数据在渲染时没有出现任何问题。这一切都与 Route Model 绑定绑定在一起,已验证可以正常工作。
Eloquent 模型中的属性获取器
public function getLinksAttribute() {
if (!empty($this->attributes['links'])) {
return json_decode($this->attributes['links']);
}
}
public function getImagesAttribute() {
if (!empty($this->attributes['images'])) {
return json_decode($this->attributes['images']);
}
}
调用链接属性的刀片模板部分,失败
@if (is_array($artist->links))
<div class="links">
<h4>Links</h4>
<ul>
@foreach ($artist->links as $link)
{{ $link->title }}, {{ $link->url }}
@endforeach
</ul>
</div>
@endif
调用images属性的刀片模板部分,成功
@if (is_array($artist->images))
<ul class="images">
@foreach ($artist->images as $image)
<li>{!! Html::image(Html::buildS3Url(array(
"basedir" => "artists", "id" => $artist->id, "prefix" => $image->prefix,
"extension" => $image->extension, "conversion" => "display")
), $artist->name) !!}</li>
@endforeach
</ul>
@endif
通过 tinker 将数据库中的 Json 编码数据,以及随后的 dd()
### links (doesn't work)
#tinker output
links: "[{"'title'":"test","'url'":"http:\/\/test.com"}]",,
# dd()
array:1 [▼
0 => {#308 ▼
+"'title'": "test"
+"'url'": "http://test.com"
}
]
### images (works)
# tinker output
images: "[{"prefix":1440693993,"extension":"png"},{"prefix":1440697822,"extension":"png"}]"
# dd()
array:2 [▼
0 => {#308 ▼
+"prefix": 1440693993
+"extension": "png"
}
1 => {#307 ▼
+"prefix": 1440697822
+"extension": "png"
}
]
【问题讨论】:
标签: php laravel laravel-5.1