2017-11-14 5 views
0

Edit: Ich bin API Routen verwenden, so habe ich keine Ansichten und solcheLaravel 5.5 drei Join-Tabelle

Ich habe eine Datenbank, wie diese

User: 
    id 
    name 

card: 
    id 
    card_number 
    user_id 


swipe: 
    id 
    time 
    card_number 

die Beziehungen wie folgt Benutzer gehen hat eine Karte ein Karte hat viele Swipe

das wäre als solche schließt sich

user.id = card.user_id 
card.card_number = swipe.card_number 

In Larvel ich habe 3 m Marken.

user 
card 
swipe 

Benutzer Modell

class user extends Model 
{ 

    public function card() 
    { 
     return $this->hasOne('App\card','user_id','id'); 
    } 

} 

in einem Controller, wenn ich

$model = user::with('card')->get(); 

bekomme ich die Kartendaten mit den Benutzerdaten verbunden, wie erwartet.

class card extends Model 
{ 


    public function person() 
    { 
     return $this->belongsTo('App\user'); 
    } 

    public function swipe(){ 
     return $this->hasMany('App\swipe','card_number','card_number'); 
    } 
} 

wenn ich jetzt

$ model = user tun :: mit ('card.swipe') -> get();

, die ich erwarten würde, alle Benutzer mit ihren Karten zurückzugeben, und Swipes, die mit dieser Karte verbunden sind.

jedoch, was ich bekommen ist

500 interner Serverfehler

Was mache ich falsch hier?

+0

Aktivieren Sie den Debug-Modus und geben Sie uns die Fehlermeldung. – tyteen4a03

+0

Ich benutze die API Routes so keine Ansichten oder irgendetwas, ich habe Debug aktiviert, aber es ist ein 500 interner Serve Fehler, nichts wird geloggt es stirbt nur –

+0

bist du sicher, dass 'fremder_key', 'local_key' übereinstimmen? '('App \ swipe', 'card_number', 'card_number')' – user3350597

Antwort

0

Zum Beispiel können Sie so verwenden.

$shares = DB::table('shares') 
    ->join('users', 'users.id', '=', 'shares.user_id') 
    ->join('follows', 'follows.user_id', '=', 'users.id') 
    ->where('follows.follower_id', '=', 3) 
    ->get(); 
+0

Ich könnte, aber ich möchte eloquent Modelle und Beziehungen verwenden –

+0

[link] (https: // stackoverflow .com/questions/18388664/laravel-join-with-3-tables) ** hier klicken ** –

0

Sie kann nicht wie diese,

user::with('card.swipe')->get(); 

Verwendung Hat viele Durch

https://laravel.com/docs/5.5/eloquent-relationships#has-many-through 

user - countries (in docs) 
card - users (in docs) 
swipe - posts (in docs) 

$country->posts; 
$user->swipe; 
0

Ich weiß nicht, ob dies der richtige Lösung ist, aber man kann versuchen:

public function swipe(){ 
    return $this->hasMany('App\swipe')->where('card_number','card_number'); 
} 
0

Sie sollten in der Lage sein, extra ct Ihre Daten in Ihrem Controller wie folgt aus:

return user::with(['card' => function($query) { 
    $query->with('swipe'); 
}])->get(); 

Stellen Sie sicher, Ihre Swipe-Modell "belongsTo ('App \ Karte')".