Los valores de extracción son separados y no duplicados.

esta es mi tabla de base de datos

Cuando se extrae es así

Cuando se extrae es así

Yo quiero ser asi

introduzca la descripción de la imagen aquí

Por favor aplique a este ejemplo

<div class="scrolling menu">
 @foreach($genres as $genre)
   <a href="{{ url('cinema/movies/genre/'.$genre->genre) }}" class="item">{{ $genre->genre }}</a>
 @foreach
</div>
1
Ali Talib 14 sep. 2018 a las 19:07

3 respuestas

La mejor respuesta

Respuesta "Suficientemente Buena":
Si solo está tratando de resolver el problema en cuestión y nada más, puede usar algunas funciones PHP fácilmente disponibles como explode y trim para ayudarlo.

 @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

Mejor respuesta:
Si tiene control sobre el esquema de su base de datos, recomendaría crear una tabla separada para contener valores de género normalizados como este:

CREATE TABLE Genre
(
   ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   NAME VARCHAR(255) NOT NULL,
   DESCRIPTION VARCHAR(512) NOT NULL
);

Luego, cree una tabla MovieGenre para vincular películas con géneros, que se vería así:

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)
);

Obviamente, con una tabla de géneros separada (y una clase de registro activa, supongo), podrá obtener una lista única de géneros. Entonces solo tendrías que establecer un has_many en tu clase de Película y deberías poder vincular todos los géneros a una película en particular.

0
Brian Driscoll 14 sep. 2018 a las 17:24

Puede usar la siguiente solución para resolver su problema:

@foreach($genres as $genre)
    <a href="{{ url('cinema/movies/genre/'.$genre->genre) }}" class="item">
        @if($trimmed = explode(',', $genre->genre, 2))
            {{ $trimmed[0] }}
        @endif
     </a>
@foreach

Y también tienes que cubrir la situación si el género está vacío.

0
staskrak 15 sep. 2018 a las 10:07

Solucionaría esto de la manera adecuada con PHP + MySQL antes de que salga en HTML. Tendrá que usar PDO o cualquier contenedor de base de datos que esté usando. Esencialmente desea esta consulta:

SELECT DISTINCT genre FROM cinema_movies

Almacene eso en una variable (matriz) llamada $rows;

Luego recorra y cree una lista única

$categories = [];

foreach ($rows as $r) {
  $categories = array_merge($categories, explode(", ", $r));
}

$unique_cats = array_unique($categories)
0
Tallboy 14 sep. 2018 a las 17:11