错误说明了这一点:
SQLSTATE[HY000]: General error: 1096 No tables used (SQL: select `Marcas`.`nombre` as `Marca`, `Modelo`.`nombre` as `Modelo`, `Vehiculos`.`year` as `Anio`, `Vehiculos`.`id` from `Vehiculos` inner join `Reservaciones` on `Vehiculos`.`id` = `Reservaciones`.`id_vehiculo` inner join `Marcas` on `Vehiculos`.`id_marca` = `Marcas`.`id` inner join `Modelo` on `Vehiculos`.`id_modelo` = `Modelo`.`id` where `Vehiculos`.`id_marca` = 1 and `Marcas`.`id_categoria` = 2 and `Vehiculos`.`id` not in (select *))
这是我在laravel中的查询:
public function checkDisponibilityByDate(Request $req){
$fecha = $req->fecha;
$vehiculos= Vehiculo::join('Reservaciones', 'Vehiculos.id', '=', 'Reservaciones.id_vehiculo')
->join('Marcas', 'Vehiculos.id_marca', '=' , 'Marcas.id')
->join('Modelo', 'Vehiculos.id_modelo', '=' , 'Modelo.id')
->select('Marcas.nombre as Marca', 'Modelo.nombre as Modelo', 'Vehiculos.year as Anio', 'Vehiculos.id')
->where('Vehiculos.id_marca', '=' ,$req->id_marca)
->where('Marcas.id_categoria', '=' ,$req->id_categoria)
->whereNotIn('Vehiculos.id', function($fecha) {
Reservacion::select('Reservaciones.id_vehiculo')
->from('Reservaciones')
->where('Reservaciones.fecha', '=', $fecha);
})
->get();
return $vehiculos->toJson();
}
我希望你能帮助我,我正在与Laravel 5合作
答案 0 :(得分:1)
我认为如果您想将参数传递给查询,则需要使用use($fecha)
传递参数
public function checkDisponibilityByDate(Request $req)
{
$fecha = $req->fecha;
$vehiculos= Vehiculo::join('Reservaciones', 'Vehiculos.id', '=', 'Reservaciones.id_vehiculo')
->join('Marcas', 'Vehiculos.id_marca', '=' , 'Marcas.id')
->join('Modelo', 'Vehiculos.id_modelo', '=' , 'Modelo.id')
->select('Marcas.nombre as Marca', 'Modelo.nombre as Modelo', 'Vehiculos.year as Anio', 'Vehiculos.id')
->where('Vehiculos.id_marca', '=' ,$req->id_marca)
->where('Marcas.id_categoria', '=' ,$req->id_categoria)
->whereNotIn('Vehiculos.id', function($query) use ($fecha) {
$query->select('id_vehiculo')
->from('Reservaciones')
->where('fecha', '=', $fecha);
})
->get();
return $vehiculos->toJson();
}
或者您可以通过单独构建数组来简化whereNotIn
public function checkDisponibilityByDate(Request $req)
{
$fecha = $req->fecha;
$check = Reservacion::where('fecha', $fecha)->lists('id_vehiculo');
$vehiculos= Vehiculo::join('Reservaciones', 'Vehiculos.id', '=', 'Reservaciones.id_vehiculo')
->join('Marcas', 'Vehiculos.id_marca', '=' , 'Marcas.id')
->join('Modelo', 'Vehiculos.id_modelo', '=' , 'Modelo.id')
->select('Marcas.nombre as Marca', 'Modelo.nombre as Modelo', 'Vehiculos.year as Anio', 'Vehiculos.id')
->where('Vehiculos.id_marca', '=' ,$req->id_marca)
->where('Marcas.id_categoria', '=' ,$req->id_categoria)
->whereNotIn('Vehiculos.id', $check)
})
->get();
return $vehiculos->toJson();
}
希望这会有所帮助。
如果你可以分享你的模型和表结构,那么可能会建议其他/纯粹的雄辩的方法。