我正在尝试构建标签系统。
在我的数据库中,我有一个列topics
的表tags
。标签是JSON对象。
我的路线:
Route::get('t/{tag}', 'myController@tag')->name('tag');
public function tag( $tag )
{
return view('tags.tag', ['tag' => $tag, 'topics' => DB::table('topics')->get()]);
}
然后:
@foreach ($topics as $topic)
@if (in_array($tag, json_decode($topic->tags, true)))
<tr>
<td class="col-md-6 col-sm-6">
<a href="#" title="">
<strong>{{ $topic->topic_name }}</strong>
</a>
</td>
<td class="col-md-1 col-sm-1 text-right">
@foreach (json_decode($topic->tags) as $tag)
<span class="badge badge-primary">{{ $tag }}</span>
@endforeach
</td>
</tr>
@endif
@endforeach
我知道这不是一个完美的解决方案,我需要在查询中使用它。我怎样才能做到这一点?提前致谢。 P.S我知道' - &gt; where('topics-&gt; tags','..')
但我的MySQL早于5.7,我无法使用这些新功能。有什么建议吗?
答案 0 :(得分:1)
请在模特中使用演员
protected $casts = [
'tags' => 'array',
];
从DB
检索时,它会将JSON转换为数组参考https://laravel.com/docs/5.4/eloquent-mutators#attribute-casting