2013-06-03 110 views
2

我想知道如何從3個表創建關係。如何創建多對多的關係3模型laravel 4

這裏是我的模型結構:

用戶模型

class User extends Eloquent { 
    public function Posts(){ 
     return $this->hasMany('Post'); 
    } 
    public function comments(){ 
     return $this->hasMany('comment'); 
    } 
} 


class Post extends Eloquent { 
    public function comments() { 
     return $this->hasMany('Comments'); 
    } 
    public function user(){ 
     return $this->belongsTo('user'); 
    }  
} 

class Comments extends Eloquent { 
    public function user(){ 
     return $this->belongsTo('user'); 
    } 
    public function Post(){ 
     return $this->belongsTo('Post'); 
    } 
} 

用戶可以有很多崗位,每個崗位都有來自用戶的很多評論。

我想抓從後與用戶誰張貼評論

$comments = Post::find(1)->comments()->get(); 
foreach ($comments as $comment) { 
    // here my code now to get the user 
    $comment->user()->get() 
} 

所有意見的結果:

[ 
     { 
     id: "1", 
     post_id: "1", 
     user_id: "1", 
     reply_text: "Testing", 
     },... 
] 

我認爲這不是有效的。

我怎樣才能使這更簡單的像:

[ 
    { 
     id: "1", 
     post_id: "1", 
     user_id: "1", 
     reply_text: "Testing", 
     user_post: { 
      id: 1, 
      name: "Edi vianika", 
      profil_img: "l.jpg" 
     } 
    } 
] 
+1

查看文檔中有關[Eager Loading](http://laravel.com/docs/eloquent#eager-loading)的部分,看看是否回答任何你的問題。你不需要使用'$ comment-> user() - > get()'關係。 –

+0

謝謝@PhillSparks ..多數民衆贊成在我工作'返回鳴叫::與('用戶') - > get();'真正有用。 – edivianika

回答

0

這是正確回答對菲爾的意見,並作爲他說,你應該用戶Eager Loading

$post = Post::with('comments', 'comments.user')->find(1); 

然後,你可以簡單地重複這樣的:

foreach ($post->comments as $comment) { 
    echo $comment->user->name . ' said: ' . $comment->title; 
} 

只是爲了清楚起見,壽,我建議您命名$comment->user關係author相反,它感覺自然輸入$comment->author->name。您可以這樣做:

class Comments extends Eloquent { 

    public function author() 
    { 
     return $this->belongsTo('user', 'user_id'); 
    } 
} 

// Remember to change eager loading to 'comments.author'