2015-10-05 67 views
0

考虑这种关系:Laravel关系回归模型的模型ID insetead本身

// in Post model 
public function user() 
{ 
    return $this->belongsTo('App\Models\User'); 
} 

我觉得应该$post->user->name足以让后期的主人的名字。但$post->user返回用户标识而不是用户模型。所以我必须使用:

$post->user()->first()->name; 

不应该$post->user返回帖子的主人?

+1

你的关系是不正确的。您的帖子属于用户,对吗?所以它应该是'$ this-> belongsTo('App \ Models \ User');' –

+0

@StuartWagner谢谢,这是一个错字! – PHPst

回答

0

用户是属于帖子还是帖子属于用户?

从我的角度来看,用户有很多帖子,而帖子属于用户。所以我认为你搞砸了你们的关系。

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

class User extends Model 
{ 
    public function posts() 
    { 
    return $this->hasMany('Post'); 
    } 
} 

然后,一旦你有一个职位,你将能够访问它的用户。

$userName = Post::find(1)->user->name;

+0

这不适合我。 'Post :: find(1) - > user'返回用户标识不是模型。 - PHPst 11小时前 – PHPst

+0

@PHPst - 这应该有效。请提供你的'Post'模型和'User'模型。还请为'posts'和'users'提供模式。另外,你在'posts'表上有'user_id'字段吗? 最后,如果Post :: find(1) - > user'返回一个id,那么这意味着'posts'表上的外键可能是'user',它存储了id?如果是这种情况,那么你的表/列命名约定不是最佳实践。 – Gravy

+0

谢谢。是的,你帖子表上的外键是'user',它存储'id'。这种风格对我来说真的很舒服。如何使它与Laravel一起工作? Laravel有关于命名外键的建议吗? – PHPst