laravel 中条件查询 function模式

Posted LvFish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 中条件查询 function模式相关的知识,希望对你有一定的参考价值。

当需要条件查找时,可以使用下面的注入方法:

//我要预约 yudoc_name yudoc_keshi yudoc_jibing yudoc_hospital  这是需要帅选的条件
public function userYuYueDoc(Request $r) {
$data = $r->all();
//获取医生
$res = DB::table(‘dxjk_yudoc‘)
->where(‘yudoc_status‘,2)
->where(function($query)use($data){
if($data[‘yudoc_name‘] !== ‘‘){//这一步成立才会查询
$query->where(‘yudoc_name‘,‘like‘, ‘%‘.$data[‘yudoc_name‘].‘%‘);
}
})
->where(function($query)use($data){
if($data[‘yudoc_jibing‘] !== ‘‘){
//按疾病查找
$jibing_res = DB::table(‘dxjk_yudoc‘)
->select(‘yudoc_id‘,‘yudoc_jibing‘)
->get();
$doc_id = array();
if(!empty($jibing_res)){
foreach($jibing_res as $key => $val){
$val->yudoc_jibing = json_decode($val->yudoc_jibing,true);
if(in_array($data[‘yudoc_jibing‘],$val->yudoc_jibing)){
array_push($doc_id,$val->yudoc_id);
}
}
}
$doc_id = array_unique($doc_id);
$query->whereIn(‘yudoc_id‘, $doc_id);
}
})
->where(function($query)use($data){
if($data[‘yudoc_keshi‘] !== ‘‘){
$query->where(‘yudoc_keshi‘, $data[‘yudoc_keshi‘]);
}
})
->where(function($query)use($data){
if($data[‘yudoc_hospital‘] !== ‘‘){
//查找该医院所属医生,并去重,组成数组
$doc_res = DB::table(‘dxjk_docwork‘)
->select(‘docwork_yid‘)
->where(‘docwork_hospital‘,$data[‘yudoc_hospital‘])
->get();
$doc_id = array();
if(!empty($doc_res)){
foreach($doc_res as $key => $val){
array_push($doc_id,$val->docwork_yid);
}
}
$doc_id = array_unique($doc_id);
$query->whereIn(‘yudoc_id‘, $doc_id);
}
})
->orderBy(‘yudoc_tuijian‘)
->paginate(10)
->toArray();
if (!empty($res[‘data‘])) {
//将查询的时间和图片处理下
$basePath = base_path();
$basePath = $basePath."/public/uploads";
foreach($res[‘data‘] as $key => $val){
//获取医生的出诊医院
$hospital = DB::table(‘dxjk_docwork‘)
->select(‘docwork_hospital‘)
->where(‘docwork_yid‘,$val->yudoc_id)
->distinct()
->get();
if(!empty($hospital)){
$val->yudoc_hospital = $hospital;
$yudoc_money = DB::table(‘dxjk_docwork‘)
->select(‘docwork_money‘)
->where(‘docwork_yid‘,$val->yudoc_id)
->where(‘docwork_hospital‘,$hospital[0]->docwork_hospital)
->distinct()
->get();
$val->yudoc_money = $yudoc_money[0]->docwork_money;
}

$val->yudoc_time = date(‘Y-m-d‘,$val->yudoc_time);
$val->yudoc_pic = json_decode($val->yudoc_pic,true);
if(!empty($val->yudoc_pic)){
foreach($val->yudoc_pic as $k => $v){
// $img_file = $basePath.$v;
// $img_info = getimagesize($img_file);
// $val->yudoc_pic[$k] = "data:{$img_info[‘mime‘]};base64," . base64_encode(file_get_contents($img_file));
$val->yudoc_pic[$k] = self::urlPic . $v;
}
}
$val->yudoc_jibing = json_decode($val->yudoc_jibing,true);
}
return [‘code‘ => 1000, ‘data‘ => $res];
}else{
return [‘code‘ => 1001, ‘data‘ => [‘message‘ => ‘未查到医生!‘]];
}

}






























































































以上是关于laravel 中条件查询 function模式的主要内容,如果未能解决你的问题,请参考以下文章

当某些字段可以为 NULL 时,我可以使用对象作为 JPA 中条件查询的谓词吗?

SQL Server - 如何确定select查询中条件的优先级

sql语句中条件查询里in、like、及=三个的效率怎么样?

生产者消费者模式中条件判断是使用while而不是if

选择熊猫中条件为真的所有行

Microsoft SQL Server中条件字段是Nvarchar类型的,条件有中文的无法查询的原因及处理方法