【问题标题】:Looping through mysql json data循环遍历mysql json数据
【发布时间】:2017-01-30 08:47:20
【问题描述】:

使用 json 列类型使用 Laravel 5.3 和 MySql 5.7。在我看来,我无法遍历保存的 Json。这是我的设置的样子:

将 JSON 保存在 "Merchants" 列中:

["stores", "website"]

用 Eloquent 检索这个 JSON:

   $navigation = Merchant::select('merchants')
   ->where('user_id', Auth::user()->id)
   ->get();

   return View::make('dashboard', compact('navigation'));

最后是我的观点:

  @foreach($navigation as $key => $value)
      <li><a href="#">{{$value->merchants}}</a></li>
  @endforeach

结果不会循环通过保存的JSON,而是只显示实际保存的 JSON,例如:["stores", "website"] 但是我想循环它以便列出 json 数组中的每个值,例如:

<li>stores</li>
<li>website</li>

谢谢。

查看我附加的转储:

【问题讨论】:

  • 您是否尝试转储值以查看它的类型?我真的认为它会是一个字符串,你需要在你的模型中使用某种访问器函数来将它变成你想要的数组
  • 嘿@FabianBettag 见附件。
  • 是的,这是一个字符串。您需要将其转换为 PHP 等效项。见@phaberest 的回答

标签: php mysql json laravel


【解决方案1】:

你需要在模型中cast it

protected $casts = [
    'merchants' => 'json'
];

编辑

您可能需要更换刀片

@foreach($navigation as $value)
  @foreach($value->merchants as $merchant)
    <li><a href="#">{{$merchant}}</a></li>
  @endforeach
@endforeach

【讨论】:

  • 她投射但得到 htmlspecialchars() 错误。有什么想法吗?
  • 你现在有一个数组,但是你不能在&lt;a&gt;标签中打印它,因为它不是一个字符串。循环通过merchants
  • 谢谢!因此,为了将来参考,将 json 保存到 mysql JSON 列时,我应该始终转换它吗?多维数组怎么处理?
  • 是的,准确的。您可以只使用 text 列而不是 JSON 数据类型,并且无论如何将其转换为 json。由于它相当新,我仍然更喜欢文本而不是 json。结果几乎相同。
  • 感谢您的时间和知识!会传下去的! x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2017-03-27
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多