2017-09-18 4 views
0

i drei Modelle habenWie Eloquent nutzen zu können, in von einem Modell zum anderen Modell durch Zwischentisch

Artikel

id 
title 

Kommentar

id 
title 
user_id 
article_id 

Benutzer

id 
name 

was ich will erreichen, ist ein Artikel zu wählen, basierend auf seine ID mit Kommentaren und Benutzerinformationen, die diesen Kommentar

wie das gemacht:

$article = Article::find($id -- say 1)->with('comments' -- this is a relation in Article Model)->get(); 

das gibt mir Artikel mit ähnlichen Kommentare als Array von Objekten sagen einen Kommentar - zwei etc .... Kommentar

, was ich anstelle von user_id in Kommentar Objekt wollen möchte ich es für ein Benutzerobjekt

sein 210

sehen dieses Bild ist das, was ich

screen of what i have done

mit Laravel 5.4

Antwort

0

bisher erreicht können Sie Folgendes verwenden:

$articles = Article::find($id)->with('comments', 'comments.user')->get(); 

Hier 'user' ist die Beziehung, die Sie in die genannten Kommentarmodell für Benutzer.

+1

Dank des Menschen Du meinen Tag –

+0

können Sie auch diese verkürzen: '$ Artikel = Artikel :: find ($ id) -> mit ('comments.user') -> get(); ' –

+0

Fyi Sie können auch die eloquente hasManyThrough-Relation verwenden, um die Kommentartabelle zu umgehen. –

0

Wenn Sie die Fremdschlüsselbeziehung in Schemata definiert haben, können Sie Funktionen für Eloquent Relations definieren, wie im folgenden Referenzlink definiert - Laravel - Eloquent Relationships.

Sie können Funktionen in Modellen wie folgt definieren -

Artikel -

class Article extends Model 
    { 
    ... 

    public function comments(){ 

     // Accessing comments posted to that article. 

     return $this->hasMany(\App\Comment::class); 
    } 

    // Create a foreign key to refer the user who created the article. I've referred it here as 'created_by'. That would keep relationship circle complete. You may ignore it if you want. 

    public define user(){ 

     // Accessing user who posted the article 

     return $this->hasOne(\App\User::class, 'id', 'created_by'); 
    } 
    } 

Kommentar -

class Comment extends Model 
    { 
    ... 

    public function article(){ 

     // Accessing article to which the particular comment was posted 

     return $this->hasOne(\App\Article::class, 'id', 'article_id'); 
    } 

    public function user(){ 

     // Accessing user who posted the comment 

     return $this->hasOne(\App\User::class, 'id', 'user_id'); 
    } 
    } 

Benutzer -

class User extends Models 
    { 
    ... 

    public function articles(){ 

     // Accessing articles posted by a user 

     return $this->hasMany(\App\Article::class); 
    } 

    public function comments(){ 

     // Accessing comments posted by a user 

     return $this->hasMany(\App\Comment::class); 
    } 
    } 

Jetzt können Sie wie folgt verwenden -

$article = Article::findOrFail($id); 
    $comments = $article->comments; 
    $article_user = $article->user; 
    $comment_user = Comment::findOrFail($commnet_id)->user; 
    $users_comments = User::findOrFail($user_id)->comments; 
    $users_articles = User::findOrFail($user_id)->articles; 

und so weiter ...

Verwandte Themen