2017-05-13 241 views
0

我有一個相應的表以下型號:與Laravel雄辯關係5.4

用戶(用戶),用戶配置(user_profiles),評論(評論)

模式

table: users 

user_id (primary key) 
first_name 
last_name 

table: user_profiles 
user_id (foreign key) 
country 
phone 

table: reviews 
reviewer_id (the user who posted the review) 
user_id (foreign key) 
body 

我用以下查詢數據庫:

$user = User::with('profile', 'review')->find(Auth::User()->user_id); 
用戶模型3210

部分

public function profile(){ 
    return $this->hasOne(UserProfile::class, 'user_id'); 
}  

public function review(){ 
    return $this->hasOne(Review::class, 'user_id'); 
} 

用戶配置的零件模型評論部分的

public function users() { 
    return $this->belongsTo(User::class, 'user_id'); 
} 

型號

public function users() { 
    return $this->belongsTo(User::class, 'user_id'); 
} 

我怎樣才能訪問reviewer的細節使用reviewer_id from users

+0

你們的關係是不是一個多對多的,這是一個多對一。用戶應該'$ this-> haveMany()'和UserProfile應該'$ this-> belongsTo()' –

+0

你的問題混淆了'reviewer_id'和'user_id'之間的區別。看起來他們是一回事。 –

+0

'reviewer_id'實際上持有'user_id'數據,但對於撰寫評論的用戶 – BlackPearl

回答

2

作爲這個問題中討論過的sunup,我認爲OP的主要關注點是關於一個表有兩個外鍵具有相同的表。 user_idreviewer_id都是連接到users表的外鍵。

瞭解Laravel關係的一個重要的事情是,關係名稱不是硬性限制,只要它對您有意義,它可以是任何東西。相關對象將在ATTRIBUTE中可用,其確切名稱爲METHOD

class User extends Model { 

    public function review() { 
     return $this->hasOne(Review::class); 
    } 
} 

用戶的審覈將可在User::find(1)->review;

class Review extends Model { 

    public function owner() { 
     return $this->belongsTo(User::class, 'user_id'); 
    } 

    public function reviewer() { 
     return $this->belongsTo(User::class, 'reviewer_id');  
    } 
} 

從審覈,您將能夠同時訪問用戶:

Review::find(1)->owner; // This is the relationship with user_id column 
Review::find(1)->reviewer; // This is the relationship with reviewer_id column