2017-08-13 23 views
0

Ich habe zwei Modelle definieren - für die folgenden TabellenWie Eloquent Beziehung in Laravel

Der Benutzer Tabelle hat die folgenden Spalten

  • id das Benutzer Modell und das Film Modell
  • alter

Die Film Tabelle hat die folgenden Spalten

  • id
  • min_age

Wie kann ich eine Beziehung auf dem so Benutzer Modell festlegen, dass für jeden Benutzer, ich bin in der Lage zu bekommen alle Filme, die der Beschränkung folgen:

Movie.min_age < = User.age

Ich weiß, dass ich nur das Movie-Modell abfragen kann und alle Filme mit min_age kleiner oder gleich dem Alter des Benutzers erhalten. Meine Frage ist, wie kann dies durch die Definition einer Eloquent Beziehung erreicht werden innerhalb des Benutzer Modell die Funktionen wie hasMany mit() oder belongsToMany()?

+0

Haben Sie eine "goesToMany" -Beziehung zwischen Benutzern und Filmen definiert? –

+0

@RossWilson Nein, habe ich nicht. – Johnny

+0

Verwenden Sie [Abfragebereiche] (https://laravel.com/docs/5.4/eloquent#query-scopes). – Tpojka

Antwort

1

So kann ein Benutzer viele Filme ansehen. Gleichzeitig kann ein Film von mehreren Benutzern gleichzeitig angesehen werden.

Auf User.php

public function movies(){ 

    return $this->hasMany(Movie::class); 
} 

Auf Movie.php

public function users(){ 
    return $this->belongsToMany(User::class); 
} 

Zu bekommen, was Sie suchen durch Beziehung, die Sie so etwas tun;

Sagen wir, Sie haben auch ein Authentifizierungssystem.

$user = Auth::user(); 

$getMovies = $user->movies()->where('min_age','<=',$user->age)->get(); 
+0

Danke. Ich hatte den Eindruck, dass Beziehungen nur durch primäre und fremde Schlüssel funktionieren und es scheint, dass ich falsch lag. – Johnny