Laravel: как сделать идентификационный номер не должен быть одинаковым даже с другими в laravel - PullRequest
0 голосов
/ 08 апреля 2020

добрый вечер. В настоящее время я сталкиваюсь с проблемой сохранения идентификационного номера для человека. У каждого человека должен быть свой идентификационный номер. Если идентификационный номер один и тот же, это означает, что данные не должны сохраняться, но в моем случае данные сохраняются даже при наличии тех же данных. Кто-нибудь может помочь в этом?

проверить, существуют данные или нет

  public function check_child_birth_cert(){ 

        if(Child::where('child_birth_certificate_no')
                ->exists()){
           return "exist";
        }else{                                                                    
           return "not exist";
        }
    }

создание данных

'child_data.child_birth_certificate_no':function(){
                axios.get('check_child_birth_cert/'+ this.pros.child_birth_cert)
                    .then(reponse =>{
                        this.child_birth_certificate_no=reponse.data;
                    })
            }

вызвать функцию репо для контроллера

public function getchildBirth_cert(Request $request){

        $this->childRepository->check_child_birth_cert($request->all());

    }

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

ИМХО, это может выглядеть примерно так:

public function child_birth_cert_exists($child_birth_cert_no) { 

        if(Child::where('child_birth_certificate_no', '=', $child_birth_cert_no)
                ->exists()){
           return true;
        }else{                                                                    
           return false;
        }
    }

Как уже подготовлено в вашем JS -колл, вы можете привязать параметр к маршруту.
Так ваш маршрут будет выглядеть например:

Route::post('check_child_birth_cert/{child_birth_cert_no}', 'ChildBirthController@getchildBirth_cert');

Затем параметр маршрута автоматически вводится в методе вашего контроллера.

# ChildBirthController
use Illuminate\Support\Facades\Validator;
public function getchildBirth_cert(Request $request, $child_birth_cert_no) {

    $validation = Validator::make($request->all(), [
        'center_id' => 'required'
    ]);

    if ($validation->fails()) {
        \Session::flash('errors', $validation->errors()->toArray());
        return redirect()->back()->withInput();

    $this->childRepository->check_child_birth_cert($request->all(), $child_birth_cert_no);

    }

См. здесь привязку параметров для маршрутов: https://laravel.com/docs/5.0/routing#route -параметры

РЕДАКТИРОВАТЬ 1:
Я обновил примеры кода выше.
Извините, я видел, что допустил ошибку здесь. Вы уже отправили все данные запроса в check_child_birth_cert -метод.
Как правило, если в вашем запросе есть поле, вы можете получить к нему доступ одним из следующих способов (я точно пропустил хотя бы одно ...):

  • Input :: all ()
  • $ request-> get ('key') для GET-параметров
  • $ request-> post ('key ') для POST-параметров
  • $ request-> all () для обоих GET и POST

Использование проверки, как показано, помогает избавиться от if -выступления и чтобы убедиться, что все данные представлены так, как вам нужно. Вы также можете извлечь все ошибки из проверки и поместить их в свой сеанс. После этого они будут доступны в вашем view-файле для повторения и отображения. Это всего лишь быстрый пример. Было бы лучше отделить проверку от фактического контроллера на другой класс ИЛИ, еще лучше, используя Formrequests (https://laravel.com/docs/5.8/validation#form -request-validation )

Проблема с вашим примером состоит в том, что вы не отправляете никаких параметров POST или GET, насколько я понимаю ваш JS -код. Вы просто вызываете GET-маршрут с этим параметром маршрута, но это не настоящий GET-параметр. Не смешивайте их, а используйте пост-маршрут и отправьте их в качестве пост-параметров. Параметры маршрута, с другой стороны, могут немного структурировать вашу маршрутизацию. Но опасно не попадать в беду, не зная точно, какой тип маршрута вызывается в определенной точке вашего приложения ИЛИ у вас получаются маршруты, которые должны быть разными, но так как они имеют одинаковую структуру частей (разделенных символом "/" ) будет использовано первое совпадение в вашем файле маршрутов, и, возможно, не тот, который вы предполагаете использовать.

Учитывайте также следующие моменты:

  • не отправлять Данные в качестве параметра маршрута, если это просто любое значение. Он должен иметь безошибочную ссылку на данные вашего приложения. Например, вы можете сказать /users/{id}, где {id} представляет идентификатор модели пользователя в вашей базе данных. Если есть возможность получить доступ к данным, которые ему или ей не разрешено просматривать с помощью параметра маршрута, лучше упаковать этот маршрут как минимум после аутентификации или, что еще лучше, авторизации.
  • подтвердите ваш запрос, если он содержит какие-либо данные, которые вы будете использовать в своем приложении. Проверка Laravel также очищает данные, поэтому SQL -инъекция больше не является вашей главной задачей (но она должна быть в затылке).

Если вам нужно больше значений в вызываемом методе, вы должны запросить маршрут с этими значениями как (на мой взгляд, лучший вариант) POST.
Я не совсем понимаю что вы имеете в виду, имея одинаковое значение для child_birth_certificate_no и centre_id. Не могли бы вы объяснить это?

1 голос
/ 09 апреля 2020

Я считаю, что правильным способом решения этой проблемы является добавление уникального ограничения к вашему дочернему файлу миграции.

$table->string('child_birth_certificate_no')->unique()

Таким образом, вы можете предотвратить сохранение повторяющегося child_birth_certificate_no в базе данных.

1 голос
/ 08 апреля 2020

Проверка Laravel док https://laravel.com/docs/7.x/queries#where -классы . Вы написали where заявление без опции, где столбец child_birth_certificate_no что? Может равняется чему-то? ^ _ ^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...