在 laravel 5.2 中将 whereRaw() 和 orWhereRaw() 与 Join 结合使用

Using whereRaw() and orWhereRaw() with Join in laravel 5.2

我正在写这样的代码:-

$results = User::select('users.id','users.user_type','users.status','homechef_details.user_id','homechef_details.address1','homechef_details.name','homechef_details.updated_rating')
        ->join('homechef_details', function($query) use ($rating,$keyword) {
            $query->on('users.id', '=', 'homechef_details.user_id');
            $query->where('users.status','=',1);
            if(isset($rating) && !empty($rating)) 
            {
                if(count($rating)==1)
                    $query->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]);
                else if(count($rating)>1)
                {
                    $query->where(function($q) use($rating)
                    {
                        $q->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]);
                        for($r = 1; $r < count($rating); $r++)
                        {
                           $q->orWhereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[$r]);
                        }
                    });
                }
            }
        })->get();

我需要检查 where 子句中列值的底值。我收到此错误:-

Call to undefined method Illuminate\Database\Query\JoinClause::whereRaw()

如何解决这个错误?

似乎 JoinClause class 没有原始查询的方法,我建议你尝试

$results = User::select('users.id','users.user_type','users.status','homechef_details.user_id','homechef_details.address1','homechef_details.name','homechef_details.updated_rating')
        ->join('homechef_details','users.id', '=', 'homechef_details.user_id')->where('users.status','=',1);
            if(isset($rating) && !empty($rating)) 
            {
                if(count($rating)==1)
                   $results = $results->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]);
                else if(count($rating)>1)
                {
                   $results = $results->where(function($q) use($rating)
                    {
                        $q->whereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[0]);
                        for($r = 1; $r < count($rating); $r++)
                        {
                           $q->orWhereRaw('FLOOR(homechef_details.updated_rating) = '.$rating[$r]);
                        }
                    });
                }
            }
 $results = $results->get();

在闭包内部,$queryJoinClause 的实例,它没有 whereRaw() 方法。

作为 madalinivascu 答案的替代方法,您可以使用 DB::raw() 在闭包内构造原始 SQL。