我正在使用Laravel为酒店建立预订应用程序。
使用的数据库是MySQL。所有客房均配有桌子,还设有带预留客房的桌子。 ReservedRooms有一个到Rooms(room_id)的外键。
要获得某个时间间隔内的可用房间,我会使用2个查询:
首先,我得到所有未预留的房间。
$room = App\Room::whereNotIn('id',App\ReservedRoom::select('camera_id'))->get();
然后,如果预订室的入住/退房时间低于我的入住日期或高于我的结账日期,我会检查ReservedRooms表。
$room2 = App\ReservedRoom::select('camera_id')->where([['checkin','<','mycheckin'],['checkout','<','mycheckin']])->orWhere([['checkin','>','mycheckout'],['checkout','>','mycheckout']]);
在这两个查询之后,我合并了结果:
$result=$room->merge($room2);
问题是当房间被预订两次时,如果其中一个日期可用,而另一个日期不可用,则其中一个日期将通过条件,房间将显示在结果中。
答案 0 :(得分:0)
我会尝试将结果放在一个查询中(根据Laravel docs Parameter grouping):
import { Component, Inject } from '@angular/core';
import { Router } from '@angular/router';
import { UsuariosService } from '../../services/usuarios.service';
import { Usuario } from '../registro/usuario';
import { MatSnackBar } from '@angular/material/snack-bar';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material';
import { Mensaje } from './mensaje';
import * as io from 'socket.io-client';
@Component({
selector: 'chat',
templateUrl: './chat.component.html',
providers: [UsuariosService]
})
export class ChatComponent{
public usuario:Usuario;
public amigo:Usuario;
public mensajes:Mensaje[];
public texto:string;
private socket;
constructor(
public dialogRef: MatDialogRef<ChatComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private _usuariosService: UsuariosService,
public snackBar:MatSnackBar,
public _router:Router,
){
this.usuario = data.usuario;
this.amigo = data.amigo;
this.mensajes = new Array();
this.texto = "";
this.socket = io();
}
我希望它有所帮助。