hasManyThrough关系为雄辩的laravel 4

时间:2014-12-04 15:45:32

标签: laravel-4 eloquent

经过大量的搜索,我无法找到真正的解决方案来解决我的“问题”,所以如果有任何人可以帮助我,我都在聆听

...

我有树模型,帖子,用户和个人资料

Post belongsTo user – user hasMany posts == One –to-Many relation
Profile belongsTo user – user hasOne profile == One-to-One relation

数据库结构

User

---- id : primary key
---- email : string
---- name : string

...

Profile

---- id : primary key
---- user_id : foreign key
---- biography : text
---- facebook : strings

...

Post

---- id : primary key
---- user_id : foreign key
---- title : string
---- slug : string
---- body : text

...

用户模型

class User extends Eloquent  {
    public function posts(){
        return $this->hasMany('Post');
    }
    public function profile(){
        return $this->hasOne('Profile');
    }
}

个人资料模型

class Profile extends \Eloquent {
    public function user(){
        return $this->hasOne('User');
    }
}

发布模型

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

如何我可以通过帖子在个人资料表上获取用户传记(或任何其他属性)

我希望我足够清楚

1 个答案:

答案 0 :(得分:0)

您的设置中没有hasManyThrough

首先修复这种关系:

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

然后简单地说:

$post->user->profile->biography;

$user->profile->biography;

帖子中没有个人资料数据,因为postprofile都属于用户。


还有另一种方法可以链接postsprofiles表:

// Post model
public function profile()
{
  return $this->hasOne('Profile', 'user_id', 'user_id');
}

// Profile model
public function posts()
{
  return $this->hasMany('Post', 'user_id', 'user_id');
}

然后:

$post->profile->biography;

$profile->posts; // collection of Post models

这样,您可以通过不提取User模型来保存一个查询。