2017-09-25 3 views
1

Ich habe 3 Tabellen genannt Kategorien, Jahreszeit und Filme.Abfrage, wo Spalte in einer anderen Tabelle ist - Laravel

Kategorien Tisch

 
+----+---------+------------+-------------+ 
| id | name | slug | created_at | 
+----+---------+------------+-------------+ 
| 1 | It | it-2017 | SOME TIME | 
| 2 | Another | another | SOME TIME | 
| 3 |SpiderMan| spider-man | SOME TIME | 
| 4 | Cars 3 | cars-3 | SOME TIME | 
+----+---------+------------+-------------+ 

Jahreszeiten Tisch

 
+----+---------+------------+-------------+ 
| id | number |category_id | created_at | 
+----+---------+------------+-------------+ 
| 1 | 1 |  2  | SOME TIME | 
| 2 | 2 |  2  | SOME TIME | 
| 3 | 1 |  3  | SOME TIME | 
| 4 | 3 |  1  | SOME TIME | 
+----+---------+------------+-------------+ 

Filme Tisch

 
+----+---------+------------+-------------+ 
| id | name | slug | season_id | 
+----+---------+------------+-------------+ 
| 1 | Pilot | pilot |  1  | 
| 2 | Second | second |  1  | 
| 3 | Third | third |  1  | 
| 4 | Fourth | fourth |  1  | 
+----+---------+------------+-------------+ 

Und ich gemacht, dass URL wird sich so etwas wie dieses

mywebpage.com/serie/{category_slug}/season-{season_number}

Aber wo ich zu dieser URL gehen, Abfrage wird in allen Jahreszeiten alle Filme zeigen, . Nicht die Saison aus der aktuellen Kategorie.

mein Controller

public function getMovies($category_slug, $season_number) 
{ 
    $categories = Category::where('slug', $category_slug)->get(); 
    $seasons = Season::with('movies')->where('number', $season_number)->get(); 

    return view('routes.getMovies', compact('categories', 'seasons')); 
} 

Und meine Ansicht getMovies.blade.php

@foreach($categories as $category) 
    @foreach ($seasons as $season) 
     @foreach ($season->movies as $movie) 
     Season - {{ $season->number }} 
     {{ $movie->name }} 
     {{ $movie->description }} 
     @endforeach 
    @endforeach 
@endforeach 

Und mein Ausgang ist wie Staffel 1 aus allen Kategorien, aber ich mag nur Jahreszeit von Strom zeigen, Kategorie.

+0

Versuchen Sie, diese '$ Jahreszeiten = Saison :: mit ('Filme') -> where ('Anzahl', $ SEASON_NUMBER) -> wo ('category_id', $ categories-> id) -> get(); '!! – Maraboc

+0

@Maraboc, es gibt mir einen Fehler * Eigenschaft [ID] existiert nicht auf dieser Sammlung Instanz. * – Ridiculous

+0

Also versuchen Sie diese $ Kategorie = Kategorie :: wo ('slug', $ Kategorie_Slug) -> first() ; $ seasons = Jahreszeit :: mit ('Filme') -> wo ('Nummer', $ Jahreszeitnummer) -> wo ('Kategorie_ID', $ Kategorie-> ID) -> get(); Rückansicht ('routes.getMovies', kompakt ('Kategorie', 'Jahreszeiten')); ' – Maraboc

Antwort

1

Zuerst machen Sie sicher, die richtige Beziehung auf Ihre Modelle setzen

Filmmodell

public function season() 
{ 
    return $this->belongsTo(Season::class, 'season_id'); 
} 

Saison Modell

public function category() 
{ 
    return $this->belongsTo(Category::class, 'category_id'); 
} 

Dann wird im Folgenden alle Filme mit einer bestimmten Jahreszeit bekommen Nummer und spezifische Kategorie Slug

$movies = Movie::whereHas('season', function ($season) use ($season_number) { 
    $season->where('number', $season_number); 
}) 
->whereHas('season.category', function ($category) use ($category_slug) { 
    $category->where('slug', $category_slug); 
}) 
->with('season') 
->get(); 

und im Hinblick

@foreach ($movies as $movie) 
    Season - {{ $movie->season->number }} 
    {{ $movie->name }} 
    {{ $movie->description }} 
@endforeach 
0

Versuchen Sie folgendes:

$categories = Category::where('slug', $category_slug)->first()->id; 

$seasons = Season::with('movies')->where('number', $season_number)->where('category_id', $categories)->get(); 
Verwandte Themen