在 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();
在闭包内部,$query
是 JoinClause
的实例,它没有 whereRaw()
方法。
作为 madalinivascu 答案的替代方法,您可以使用 DB::raw()
在闭包内构造原始 SQL。
我正在写这样的代码:-
$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();
在闭包内部,$query
是 JoinClause
的实例,它没有 whereRaw()
方法。
作为 madalinivascu 答案的替代方法,您可以使用 DB::raw()
在闭包内构造原始 SQL。