Как получить запись из БД с использованием идентификатора, если нет записи для этого идентификатора, увеличить этот идентификатор и получить запись в laravel - PullRequest
1 голос
/ 10 июля 2019

Как получить запись из БД с использованием идентификатора, и если нет записи для этого идентификатора, увеличить этот идентификатор и получить запись с использованием увеличенного идентификатора в Laravel, т.е.: я передаю идентификатор 50, если нет записи для идентификатора (50), затем попробуйтедля 51. Если результат не найден для 51, то 52 ...

Я пытался увеличить id как 50 + 1, что не работает для каждого случая.если нет доступного идентификатора, то как отформатировать этот код:

то есть

Просто скажу, что вы четко определите структуру таблицы следующим образом:

id    Personid

50   1
51   2
52   null
53   null
54   null
55   null
56   null
57   5
58   6

если я передам идентификатор52 означает, что будет выполняться поиск по идентификатору 52, значение 52 отсутствует, тогда он должен искать следующий идентификатор 53, который также равен нулю ... поэтому для этого нужно использовать идентификатор 57

Код Laravel:

public function getApplicantPopupDetails($id, $start = null) {
    $out = [];
    $array = [];
    $out = $this->initOut();
    $PersonId = $id;

    $applicant = DB::table('applicants')
                    ->where('applicants.PersonId', '=', $PersonId)
                    ->get(['Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl']);
    if($applicant->isEmpty()){

        if($start == 0){
            $ids = $PersonId - 1;
        } else {
            $ids = $PersonId + 1;
        }
        $array['main'] = $applicant;
        $this->getApplicantPopupDetails($ids,0);
    }

    $out['results'] = $array;
    return $out;
}

Я ожидал вышеупомянутых результатов без каких-либо проблем.

Ответы [ 4 ]

0 голосов
/ 10 июля 2019

Это работает (спасибо за вашу поддержку, ребята)

public function getApplicantPopupDetails($id, $start = null) {
    $out = [];
    $array = [];
    $out = $this->initOut();
    $PersonId = $id;

    $applicant = DB::table('applicants')
                    ->where('applicants.PersonId', '=', $PersonId)
                    ->get(['Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl']);
    if($applicant->isEmpty()){

            $applicant = DB::table('applicants')
                    ->where('applicants.PersonId', '>=', $PersonId)
                    ->orderBy('PersonId' ,'ASC')
                    ->first(['PersonId','Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl']);
    }

    $out['results'] = $array;
    return $out;
}
0 голосов
/ 10 июля 2019

Пожалуйста, попробуйте этот способ,

public function getApplicantPopupDetails($id, $start = null) {
    $out = [];
    $array = [];
    $out = $this->initOut();
    $PersonId = $id;

    $applicant = DB::table('applicants')
                    ->select('Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl')
                  ->where('applicants.PersonId', '=>', $PersonId)
                   ->first();
   if($applicant->isEmpty()){

       if($start == 0){
           $ids = $PersonId - 1;
       } else {
          $ids = $PersonId + 1;
       }
      $array['main'] = $applicant;
     $this->getApplicantPopupDetails($ids,0);
    }

    $out['results'] = $array;
    return $out;
}
0 голосов
/ 10 июля 2019

public function getApplicantPopupDetails($id, $start = null) {
    $out = [];
    $array = [];
    $out = $this->initOut();
    $PersonId = $id;

    $applicant = DB::table('applicants')
                    ->select('Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl')
                  ->where('applicants.PersonId', '=>', $PersonId)
                   ->first();
   if($applicant->isEmpty()){

    	$newID = $id+1; //P1
    	$newquery = $this->getApplicantPopupDetails($newID,0); //recursive function
      $array['main'] = $applicant;
    }

    $out['results'] = $array;
    return $out;
}

P1: просто добавьте 1 к заданному $ id и сделайте рекурсивный вызов текущей функции, надеюсь, это может вам помочь:)

0 голосов
/ 10 июля 2019

Из вашего кода я понял, что вы хотите получить строку с PersonId >= $id,

, что можно сделать просто с помощью кода ниже:

public function getApplicantPopupDetails($id, $start = null) {
    $out = [];
    $array = [];
    $out = $this->initOut();
    $PersonId = $id;

     DB::table('applicants')
            ->select('Name','Address','Surname','country','Address','ContactNo','Email','created_at','imgUrl');
            ->where('applicants.PersonId', '>=', $PersonId)
    if($applicant->isEmpty()){

        if($start == 0){
            $ids = $PersonId - 1;
        } else {
            $ids = $PersonId + 1;
        }
        $array['main'] = $applicant;
    }

    $out['results'] = $array;
    return $out;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...