Laravel从数据库查询中的变量中删除引号

时间:2017-09-08 19:26:53

标签: php sql laravel join

我正在使用Laravel(5.4)构建RAW数据库查询,并且我在该laravel中遇到问题是在SQL输出中为连接中的变量放置引号...结果是mysql认为变量...例如输出为1或数字的东西是一列并输出错误"找不到列' 1'在ON子句中

问题SQL条款:

- >加入(' event_jury_sub_detail',函数($ join)使用($ userid)                         {                         $ join-> on(' event_jury_sub_detail.evtpartsub_id',' =',' event_partsubmissions.id')                              - >在(' event_jury_sub_detail.authoruser_id',' =',$用户ID);

问题:$ userid获取引号...并变为"和event_jury_sub_detailauthoruser_id = 1" - Laravel将其视为要查找和失败的列。

如果删除了引号,它可以正常工作......如何解决此问题?

完整查询

$tbl_return = DB::table('event_partsubmissions')
            ->select(DB::raw('event_partsubmissions.*,
                                users.usr_firstnames,
                                users.usr_surnames,
                                users.email,
                                users.usr_nationality,
                                users.usr_country,
                                event_jury_sub_detail.id as evtjurysubdetid,
                                event_jury_sub_detail.evtjurysubdet_pointsawarded,
                                event_jury_sub_detail.evtjurysubdet_notes,
                                event_jury_sub_detail.evtjurysubdet_randomkey
                            '))
            ->join('event_participation', 'event_partsubmissions.evtpartsub_evtpartid', '=', 'event_participation.id')                
            ->join('users', 'evtpart_userid', '=', 'users.id')
            ->join('event_jury_sub_detail', function($join) use($userid)
                    {
                    $join->on('event_jury_sub_detail.evtpartsub_id', '=', 'event_partsubmissions.id')
                        ->on('event_jury_sub_detail.authoruser_id','=',$userid);                        
                    })
            ->where('event_partsubmissions.evtpartsub_evtid', '=', $id)
            ->where('event_partsubmissions.evtpartsub_enabled', '>=', $partlevel)
            ->where('event_participation.evtpart_enabled', '>=', 1) 
            ->where('event_participation.evtpart_level', '>=', 100)  
            ->where('users.usr_enabled', '>=', 1)  
            ->get();

2 个答案:

答案 0 :(得分:1)

您可以尝试使用表连接的别名:

->join('event_jury_sub_detail as ejsd', ...

并在以下地方使用别名:

->$join->on('ejsd.evtpartsub_id', '=', 'event_partsubmissions.id')

对于连接条件中的标量参数,您可以使用DB::raw($userid)之类的DB包装器:

->on('ejsd.authoruser_id','=',DB::raw($userid));

答案 1 :(得分:0)

使用DB :: raw()

- > on(DB :: raw(" event_jury_sub_detail.authoruser_id ='"。$ userid。"'"))