无法理解 laravel 中的关系 eloquent

Cant understand relationship eloquent in laravel

我想 select 我的用户 table:

select name from users where room.user1_id = user.id

我的想法是让两个用户在一个房间里。在我的用户模型中,我有这些:

public function room(){
    return $this->belongsTo('App\Room', 'user1_id');
}

在房间模型中:

public function user(){
    return $this->hasMany('App\User');
}

我试过在控制器中这样调用:

$room = Room::find($room_id);
return $room->user->name;

这是一个例子:

https://www.youtube.com/watch?v=42l4nHl_aUM 

在:9:05

所以这个 returns 这个错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.room_id' in 'where clause' (SQL: select * from用户where用户.room_id= 8 and用户.room_idis not null)

房间和用户之间的关系是反向的。

将您的用户模型更改为:

public function room(){
    return $this->hasOne(App\Room::class, 'user1_id');
}

和房间模型:

public function user1 (){
    return $this->belongsTo(App\User::class, 'user1_id');
}

public function user2 (){
    return $this->belongsTo(App\User::class, 'user2_id');
}

但是,如果将来可以为用户分配不同的活动、预订等房间,最好创建一个枢轴 table 并使用 many-to-many 关系。约定会将其命名为 room_user 并在迁移中定义为:

$table->unsignedInteger('room_id');
$table->unsignedInteger('user_id');

$table->foreign('room_id')->references('id')->on('rooms');
$table->foreign('user_id')->references('id')->on('users');

那么您的模型关系将更改为:

// User.php
public function rooms (){
    return $this->belongsToMany(App\Room::class);
}

// Room.php
public function users (){
    return $this->belongsToMany(App\User::class);
}

以后可以通过查询范围或过滤结果集合来应用任何其他约束。