【问题标题】:SQLSTATE[HY000]: General error: 1096 No tables usedSQLSTATE [HY000]:一般错误:1096 未使用表
【发布时间】:2017-04-30 10:46:36
【问题描述】:

错误是这样说的:

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

【问题讨论】:

  • 查看查询末尾的...and Vehiculos.id not in (select *)。看到那里的问题了吗?
  • 如果我不得不猜测,那将是因为您没有从您的 whereNotIn 回调中返回任何内容。但我不擅长口才,所以也许它有一些魔力。
  • 尝试将其更改为return Reservaction::select
  • 它不起作用@Barmar
  • 试试whereNotIn('Vehiculos.id', function($query) use($fecha){ $query->select('id_vehiculo')->from('Reservaciones')->where('Reservaciones.fecha', '=', $fecha);。你使用的是哪个 Laravel 版本 L5.0 或更高版本?您将 eloquent 与查询构建器混合在一起,这似乎不是最佳实践。如果没有表结构和模型关系代码,就不可能提供替代方法。

标签: php mysql laravel-5


【解决方案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();
}    

希望这会有所帮助。

如果您可以分享您的模型和表结构,那么可能会建议其他/纯雄辩的方法。

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2012-10-25
    • 2014-12-31
    • 2021-09-10
    • 1970-01-01
    • 2013-06-20
    • 2021-06-16
    相关资源
    最近更新 更多