在一个库里根据姓名,身份证号搜索人物信息

  1. $queryName表示姓名,$queryId表示身份证号,$queryLibid表示库id,我在一个库里进行姓名和身份证搜索功能,姓名和身份证不能同时为空(不是模糊搜索),如果姓名不为空,身份证为空,把满足条件的人查询出来;姓名为空,身份证不为空,把满足条件的人查询出来;如果都不为空,俩者都满足的查出来;人必须在这个库里,不能把其他库的人查出来
  2. $queryName = request('queryName');
    $queryId = request('queryIdcode');
    $queryLibid = request('queryLibid');
    if (empty($queryName) && empty($queryId)) {

      return [
         'error' => 1,
         'msg' => "请输入搜索条件",
     ];

    }
    $infos = new YBukonglibMgr;
    $infos = $infos->where('id',$queryLibid);
    $infos = $infos->whereHas('people', function ($query) use($queryName, $queryId) {

     if(!empty($queryName)) {
         $query = $query->where('name',$queryName);
     }
     if (!empty($queryId)) {
         $query = $query->where('id_code',$queryId);
     }

    });
    $view = 'library/control/result_querypeople';
    3 .
    clipboard.png

clipboard.png

阅读 5k
5 个回答

$tid = $queryLibid;

        // dd($infos);
        $infos = new \YPeoplelib;
        if(!empty($queryName)) {
            $infos = $infos->where('name', '=', $queryName);
        }
        if (!empty($queryId)) {
            $infos = $infos->where('id_code', '=', $queryId);
        }
         $peoples_query = $infos->get();
         // dd($peoples);
         $infos = \YBukonglibMgr::find($queryLibid)->people()->get();
         // dd($infos);
         $peoples = [];
         foreach ($peoples_query as $vid) {
            foreach ($infos as $inid){
                if ($vid->id == $inid->id) {
                    $peoples[] = $inid;
                }
            }
         }
         $sum = count($peoples); 
         // dd($peoples);
        $view = 'library/control/result_querypeople';
        return view($view, compact('peoples', 'sum', 'tid'));
        最后用了最老土的方法解决了问题

第2步中的查询还没写完整吧?$infos->get();
第3步people()中的where()改成wherePivot('status', '<>', 2)试一下

 if(isset($queryName)) {
     $query = $query->where('name',$queryName);
 }
 if (isset($queryId)) {
     $query = $query->where('id_code',$queryId);
 }

验证的话 直接用 $this->validate().... 这样去验证
查询的话 试试这个

$res = YBukonglibMgr::when($queryName, function ($query) use ($queryName) {
    return $query->whereName($queryName);
})
->when($queryId, function ($query) use ($queryId) {
   return $query->where('id_code' , $queryId);
})->get();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题