«Достаточно хорошо» Ответ:
Если вы просто пытаетесь решить проблему и ничего более, то вы можете использовать некоторые легкодоступные функции PHP, такие как explode
и trim
чтобы помочь вам.
@php $trackedGenres = array(); @endphp
@foreach($genres as $genre)
@php $splitGenres = explode(",", $genre->genre); @endphp
@for ($i = 0; $i < count($splitGenres); $i++)
@php $thisGenre = trim($splitGenres[$i], " "); @endphp
@if (!in_array($thisGenre, $trackedGenres))
@php $trackedGenres[] = $thisGenre; @endphp
<a href="{{ url('cinema/movies/genre/'.$thisGenre) }}" class="item">{{ $thisGenre }}</a>
@endif
@endfor
@foreach
Лучший ответ:
Если у вас есть контроль над схемой базы данных, я бы рекомендовал создать отдельную таблицу для хранения нормализованных значений жанра, таких какthis:
CREATE TABLE Genre
(
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(255) NOT NULL,
DESCRIPTION VARCHAR(512) NOT NULL
);
Затем создайте таблицу MovieGenre для связи фильмов с жанрами, которая будет выглядеть примерно так:
CREATE TABLE MovieGenre
(
MovieId INT UNSIGNED NOT NULL,
GenreId INT UNSIGNED NOT NULL,
PRIMARY KEY(MovieId, GenreId),
FOREIGN KEY (MovieId) REFERENCES cinema_movie(id),
FOREIGN KEY (GenreId) REFERENCES genre(id)
);
Очевидно, с отдельной таблицей жанров (и активным классом записи,Полагаю) вы сможете получить уникальный список жанров.Тогда вам просто нужно установить has_many в вашем классе Movie, и вы сможете привязать все жанры к конкретному фильму.