雄辩与Laravel 5.4的关系

时间:2017-05-13 21:07:35

标签: laravel-5

我有以下模型和相应的表格:

用户(用户),UserProfile(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);

用户模型的一部分

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

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

UserProfile模型的一部分

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

审核模式的一部分

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

如何使用reviewer表格中的reviewer_id访问users的详细信息

1 个答案:

答案 0 :(得分:2)

作为这个问题中讨论的内容的一个亮点,我认为OP的主要关注点是关于一个表有2个具有相同表的外键。 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