我有像Venlow一样的roomConfigurations表,
id
roomTypeID
hotelId
然后酒店表就像这样
id
hotelNeme
然后用户表就像这样
id
userId
userName
passwd
然后像这样的hotel_user(Pivot)表
id
user_id
hotel_id
现在我的问题是,如何从roomConfigurations表中获取所选用户的所有记录?
我可以通过连接表格使用MySQL来做到这一点,但我不知道在Laravel 5中这样做。
如果有人能帮助我,我将非常感激。谢谢
答案 0 :(得分:0)
Laravel docs应该在这里提供帮助。
首先,您需要确保roomConfigurations
表格包含id
,room_type_id
和hotel_id
而不是hotelId
,因为Laravel需要某些命名约定。< / p>
但是,根据你到目前为止所写的内容猜测,我认为它是这样的:
class HotelUser extends Model {
// so that we can get hotels from a user
public function hotels () {
return $this->belongToMany ('App\Hotel');
}
}
class Hotel extends Model {
// so that we can get users of a Hotel
public function users () {
return $this->belongsToMany ('App\HotelUser');
}
public function roomConfigurations () {
return $this->belongToMany ('App\RoomConfiguration');
}
}
class RoomConfiguration extends Model {
}
然后使用它可能是这样的:
$userRoomConfigs = HotelUser::find(123)->hotels()->roomConfigurations();
另一种更好的可能性可能是here:
class HotelUser extends Model {
public function roomConfigurations () {
return $this->hasManyThrough ('App\RoomConfiguration', 'App\Hotel');
}
}
这样可以这样使用:
$userRoomConfigs = HotelUser::find(123)->roomConfigurations();
为了帮助您的努力,请查看this stack overflow answer,其中介绍了如何显示Laravel正在进行的原始SQL查询。
答案 1 :(得分:0)
我用过这个,它给了我想要的东西
class roomConfigController extends Controller {
public function index()
{
if(Auth::User()->role == 'client') {
$roomConfigs = roomConfiguration::whereHas('hotels', function($query)
{
$query->whereHas('users', function ($query)
{
$query->where('users.id', Auth::User()->id);
});
})->where('is_delete', '=', '0')->get();
}
else {
$roomConfigs = roomConfiguration::where('is_delete', '=', '0')->get();
}
//return $roomConfigs;
return view('roomConfig.index',compact('roomConfigs'));
}