我最近一直在尝试使用Laravel 4,到目前为止,使用Laravel 4是一种乐趣。但是,我遇到了一个问题,不是Laravel 4,而是我自己的无能。
我有一个包含3行4列的数据库。例如,假设列是:
的content_id, 内容类型, content_data, 时间戳
'content_data'列包含大约4个键值对的JSON编码数组。
当我从数据库中检索这些行(使用Eloquent)并将数据传递到我的视图中时,如何将JSON解析为我的刀片模板?
在搜索并参考Laravel文档后,我的想法是你不能,所以我尝试将JSON解码回我的控制器中的数组,然后将其传递到我的视图中。
到目前为止,我在课堂上尝试了以下内容:
<?php
class PageController extends \BaseController {
public function index()
{
$data = Content::
->where('content_type', 1)
->get();
foreach($data as $content)
{
$items[] = json_decode($content->content_data);
}
return View::make('pages.page2')
->with('data', $data)
->with('items', $items);
}
}
但是在我的Blade模板中,当我运行foreach循环来遍历提取的行时,我尝试在第一个循环中运行另一个foreach循环,循环遍历$ items数组以提取它们的值,但因为它是一个在循环中循环,我得到重复的json值。
我的刀片模板如下所示:
@extends('layouts.pages');
@section('content_body')
<h1>My <span>title</span></h1>
<div class="column col-1">
<ul>
{{-- loop through the database rows --}}
@foreach($data as $row)
{{-- loop through the json decoded values --}}
@foreach($items as $item)
{{ $item['title'] }}
@endforeach
@endforeach
</ul>
</div>
@stop
不确定我是否已正确解释它,但基本上我只是想能够在显示提取的数据库行的循环中解析我的json编码数组
我希望这对有帮助的人有意义。
答案 0 :(得分:4)
使用Eloquent Accessor根据需要转换数据。
/**
* Eloquent accessor to transform our content_data column
* from JSON to an array.
*
* @param string $data Original JSON data
* @return array
*/
public function getContentDataAttribute($data)
{
return json_decode($data);
}
然后您可以像往常一样通过$content->content_data
检索您的列,但它会被转换为数组。
通过使用mutator将传递的数组转换为JSON编码的字符串,可以在将数据保存到该列时执行反向操作。