我有以下模型和相应的表格:
用户(用户),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
的详细信息
答案 0 :(得分:2)
作为这个问题中讨论的内容的一个亮点,我认为OP的主要关注点是关于一个表有2个具有相同表的外键。 user_id
和reviewer_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