2014-04-18 70 views
0

我目前正在Laravel創建一個論壇,只是爲了學習,但我無法讓我的關係運作良好。laravel論壇的型號關係

我有一個線程,發佈和用戶模型。

我已經試過如下:

class User { 
    public function thread() { 
     return $this->hasMany('Thread'); 
    } 

    public function post() { 
     return $this->hasManyThrough('Thread', 'Post'); 
    } 
} 


class Thread { 

    public function post() { 
     return $this->hasMany('Post'); 
    } 

    public function user() { 
     return $this->belongsTo('User'); 
    } 
} 

class Post { 

    public function thread() { 
     return $this->belongsTo('Thread'); 
    } 

    public function user() { 
     return $this->belongsTo('User'); 
    } 
} 

使用這種方法,我可以得到一個特定的線程,並且在它所屬的職位。但是我無法抓住已經在帖子中發佈帖子的用戶。

我希望我的問題對你來說足夠清楚。任何幫助真的會被讚賞。

回答

1

爲清楚起見,我建議你命名你的關係奇異的hasOne /屬於關聯和複數的belongsToMany /的hasMany

等用戶和線程這將是:

public function posts() ... 

現在,這是錯誤的順序:

class User { 
    public function posts() { 
    // return $this->hasManyThrough('Thread', 'Post'); // wrong, change to: 
    return $this->hasManyThrough('Post', 'Thread'); 
    } 
} 

除此之外你關係很好看,所以你應該能夠做到這一點:

$thread = Thread::with('posts.user')->find($threadId); // eager load relations 
$thread->posts; // Eloquent Collection of Post models 
foreach ($thread->posts as $post) 
{ 
    $post->user; // author's User model 
} 

順便說一句,你總是可以看看在Laravel.io來源:https://github.com/LaravelIO/laravel.io/

+0

非常感謝您的回覆!現在它運行得更好一些。只有一件事我忘記了指定。我有'threads''users'和'posts'表。在'posts'表中,我只將user_id放在那裏,我想從user_id對應的'users'表中獲取用戶名。 –

+0

沒錯,然後在那個循環中我寫了你可以訪問這樣的用戶名$ post-> user-> username; –

+0

當我嘗試時,我得到一個「嘗試獲取非對象的屬性」錯誤。當我像$ post-> user() - > username那樣訪問它時,我得到了「Undefined property:Illuminate \ Database \ Eloquent \ Relations \ BelongsTo :: $ username」。 –