【问题标题】:Laravel: Left join sql errorLaravel:左连接sql错误
【发布时间】:2015-05-22 12:33:50
【问题描述】:

我使用 Laravel 编写了一个 sql 查询,但我不明白,为什么会出现错误!代码如下,

加入操作:

MeetingRoom::select('mr_id')

    ->leftJoin('meetingroomhistory',function($join)
    {
        $join->on('country','=',Session::get('country'));           
        $join->on('location','=',Session::get('location'));
        $join->on('building','=',Session::get('building'));
        $join->on('floor','=',Session::get('floor'));
        $join->on('name_of_mr','=',Session::get('room'));
    })
    ->where('meetingroom.id','=','meetingroomhistory.mr_id')
     ->get();

错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Bangladesh' in 
'on clause' (SQL: select `mr_id` from `meetingroom` left join
 `meetingroomhistory` on `country` = `Bangladesh` and `location` = 
`Dhaka` and `building` = `Uttara` and `floor` = `3` and `name_of_mr` = 
`1` where `meetingroom`.`id` = meetingroomhistory.mr_id)

但是,如果我手动运行查询以使用 phpmyadmin 将此语法“Bangladesh”更改为“Bangladesh”,那么它运行良好并显示结果。请有人告诉我,我该如何解决?

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    我认为您混淆了 where 部分和 join 部分。

    $join->on($x, $y) 语句用于将您的表连接在一起。 $x$y 都应该是表中列的名称 - 这就是 Laravel 为它们添加反引号的原因。

    $where() 语句用于与您提供的值进行比较。您的Session::get() 电话表明您正在这样做。

    这是一个建议的重写,但可能需要根据您的确切需求进行调整。

    MeetingRoom::select('mr_id')
        ->leftJoin('meetingroomhistory', 'meetingroom.id', '=', 'meetingroomhistory.mr_id')
        ->$where('meetingroom.country','=',Session::get('country'))
        ->$where('meetingroom.location','=',Session::get('location'))
        ->$where('meetingroom.building','=',Session::get('building'))
        ->$where('meetingroom.floor','=',Session::get('floor'))
        ->$where('meetingroom.name_of_mr','=',Session::get('room'))
        ->get();
    

    我假设国家、位置等列是会议室表格的一部分,如果不是,您可以将它们更改为 $where('meetingroomhistory.country', ...) 等等。

    最后,我不确定您为什么只选择一个值,但当然,这取决于您。如果只需要单个单元格,可以使用pluck(),如果需要大量单个结果,可以使用lists()

    【讨论】:

      【解决方案2】:

      我觉得你应该试试这个。

          MeetingRoom::select('mr_id')
            ->join('meetingroomhistory', function($join)
              {
                  $join->on('meetingroom.id','=','meetingroomhistory.mr_id')
                  ->where('meetingroomhistory.country','=',Session::get('country'));           
                  ->where('meetingroomhistory.location','=',Session::get('location'));
                  ->where('meetingroomhistory.building','=',Session::get('building'));
                  ->where('meetingroomhistory.floor','=',Session::get('floor'));
                  ->where('meetingroomhistory.name_of_mr','=',Session::get('room'));
              })
           ->get();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-02
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多