无法理解 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);
}
以后可以通过查询范围或过滤结果集合来应用任何其他约束。
我想 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);
}
以后可以通过查询范围或过滤结果集合来应用任何其他约束。