Laravel在json中搜索查询中的值

时间:2017-10-10 11:51:26

标签: php mysql json laravel

我正在尝试构建标签系统。 在我的数据库中,我有一个列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,我无法使用这些新功能。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

请在模特中使用演员

protected $casts = [
    'tags' => 'array',
];

从DB

检索时,它会将JSON转换为数组

参考https://laravel.com/docs/5.4/eloquent-mutators#attribute-casting