我试图在查询构建期间调用自定义模型函数中的方法但是会出错。这种方式是可能的。实际上我试图在两个函数中破解查询,因为filterData可能很长
在模特中,我写得像这样
public function get_filter_sql2($query, $filterData){
if( count($filterData) > 0 ){
foreach($filterData as $key=>$value){
if( $value!=''){
if( $key == 'title' ){
$query->where('b.title', 'LIKE', '%'.$value.'%');
}
if( $key == 'bannercatID' ){
$query->where('b.bannercatID', '=', $value);
}
if( $key == 'status' ){
$query->where('b.status', '=', $value);
}
}
}
}
return $query;
}
function scopeGet_all_records2($query,$filterData, $per_page){
//DB::enableQueryLog();
$result = DB::table('banner as b')
->leftJoin('banner_category as bc', 'bc.bannercatID', '=', 'b.bannercatID')
->select('*')
->where( function ($query) use ($filterData){
$this->get_filter_sql2($query, $filterData);
})
->orderBy('b.bannercatID', 'ASC')
->paginate($per_page)
;
//$result = DB::getQueryLog();
//print_r($result);
if( count($result) > 0 ){
$result = $result;
}
else{
$result = false;
}
return $result;
}
答案 0 :(得分:0)
您应该使用更多关系而不是原始数据库查询。但这取决于你。最后,使用Eloquent代码会更优雅。
我认为您的问题是您在匿名函数的位置使用$this
而不是$query
。
->where( function ($query) use ($filterData){
$query->get_filter_sql2($query, $filterData);
})