2015-10-05 88 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