Parameterized query binding in ON clause for a LEFT JOIN in Laravel Eloquent / Query Builder

后端 未结 3 873
孤城傲影
孤城傲影 2021-01-14 02:21

Let\'s say I want to show a full list of awards with type=\"color\":

Awards        Type     2013 Winner
======        ====     ===========
Blue Award    colo         


        
3条回答
  •  陌清茗
    陌清茗 (楼主)
    2021-01-14 02:59

    Here's an odd work-around (didn't want to extend the Builder and JoinClause classes):
    Notice: This will break query chaining with -> so notice the where was seperated below.

    $query = DB::table('awards')
             ->leftJoin('winners', function($join)
                   {
                        $join->on('awards.id','=','winners.award_id');
                        $join->on('winners.year','=',DB::raw('?'));  
                   }
             ->setBindings(array_merge($query->getBindings(),array($year)));
    
    $query->where('awards.type','color');
    
    $awards = $query->get();
    

    UPDATE: Taylor added joinWhere, leftJoinWhere... he says that "if you have a function join just use ->where and ->orWhere from within the Closure." I've yet to try this though.

提交回复
热议问题