Как искать строки в массиве массивов, используя eloquent - PullRequest
0 голосов
/ 02 июня 2018

Итак, у меня есть столбец базы данных, в котором содержимое представляет собой массив, например:

[{"tag_name":"example1"},{"tag_name":"example2"}, {"tag_name":"example3"}]

Что я пытаюсь сделать, это получить видео с определенным тегом.Все видео страницы имеют определенные теги, и когда пользователь щелкает один из этих тегов, он перенаправляется на просмотр, где будут отображаться похожие видео с одинаковым тегом.

Сейчас у меня есть следующий контроллер:

public function search($tag){
    $tag = urldecode($tag);
    $videos = Video::where('tags', 'LIKE', $tag)->paginate(12);
    $settings = Detail::find(1);
    $ads = Ad::find(1);

    return view('search', ['videos' => $videos, 'settings' => $settings, 'ads' => $ads]);

}

И у меня есть следующее представление (search.blade.php):

@foreach($videos as $video)

    <div class="col-lg-4 col-xs-12">

        <div class="row justify-content-center">

            <a href="{{ route('videos.videopage', $video->id) }}"><img class="articleImg" src="{{$video->imgurl}}"></a>

        </div>


        <div>
            <p class="float-left">{{$title = substr($video->title, 0, 30) . " ..."}}</p>

            <small class="duration float-right">{{$video->duration}}</small>

            <div class="progress float-right">
                <div class="progress-bar bg-success" role="progressbar" style="width: {{$video->rating}}%" aria-valuenow="{{$video->rating}}" aria-valuemin="0" aria-valuemax="100"></div>
            </div>


        </div>

    </div>  


@endforeach

Проблема в том, что прямо сейчас, на мой взгляд, не отображаются видео, даже если я не получаюошибки вообще.Это потому, что столбцы имеют массив массивов?

1 Ответ

0 голосов
/ 02 июня 2018

Я предполагаю, что это потому, что ваш контроллер возвращает 0 видео, потому что тег никогда не совпадает.Вы используете оператор LIKE без экранирования тега с %, поэтому вы ищете совпадение с тегом точно и потому, что у вас есть массив теговкак столбец, который никогда не произойдет.

Одним из решений, которое вы можете реализовать, является изменение вашего тега на что-то вроде этого:

public function search($tag){
   $tag = urldecode($tag);
   $videos = Video::where('tags', 'LIKE', '%'.$tag.'%')->paginate(12);
   $settings = Detail::find(1);
   $ads = Ad::find(1);

   return view('search', ['videos' => $videos, 'settings' => $settings, 'ads' => $ads]);
}

Здесь вы можете прочитать больше оНРАВИТСЯ оператор: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...