拉拉维尔:如何做身份号码不应该是相同的,即使和拉拉维尔的其他人也是一样的



晚上好。目前我面临的问题是保存一个人的身份号码。每个人都应该有不同的身份号码。如果标识号相同意味着数据不应该保存,但在我的情况下,即使有相同的数据,数据也会保存。有人能帮忙吗?

检查数据是否存在

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;
})
}

将函数repo调用到控制器

public function getchildBirth_cert(Request $request){
$this->childRepository->check_child_birth_cert($request->all());
}

IMHO这可能看起来更像这样:

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 IlluminateSupportFacadesValidator;
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-方法中
一般来说,如果您的请求中有一个字段,您可以通过以下方式访问它(我肯定至少错过了一个…(:

  • 输入::all((
  • get参数的$request->get('key'(
  • post参数的$request->post('key'(
  • $request->all((用于获取POST

如图所示使用验证可以帮助您摆脱if-语句,并确保所有数据都以您需要的方式呈现。您还可以从验证中提取所有错误,并将它们放入会话中。之后,它们将在视图文件中可用,以便迭代和显示。这只是一个简单的例子。最好将验证从实际控制器分离到另一个类中,或者使用Formrequests更好(https://laravel.com/docs/5.8/validation#form-请求验证(

您的示例的问题是,就我所理解的JS代码而言,您没有发送任何POST或GET参数。您只需要用这个路由参数调用一个GET路由,但这不是一个真正的GET参数。不要混合它们,而是使用post路由并将它们作为post参数发送。另一方面,路由参数可以帮助结构化路由。但是,如果你不知道在你的应用程序中的某个点上调用了什么样的路由,或者你最终得到的路由是不同的,但由于它们具有相同的部分结构(用"/"分隔(,那么你的路由文件中匹配的第一个将被使用,而可能不是你想要使用的那个。

还应考虑以下几点:

  • 如果数据只是任何值,则不将其作为路由参数发送。它应该对您的应用程序数据有一个准确无误的引用。例如,您可以说/users/{id},其中{id}表示数据库中用户模型的id。如果有任何机会通过路由参数访问他或她不允许看到的数据,那么最好将该路由至少封装在身份验证之后,甚至更好地还包括授权
  • 如果您的请求包含您将在应用程序中使用的任何数据,请验证该请求。Laravel的验证也净化了数据,因此SQL注入不再是您主要关心的问题(但它应该在您的脑海中(

如果您在调用的方法中需要更多的值,您必须使用这些值请求路由作为(我认为最好的选项(POST
我真的不明白child_birth_certificate_nocentre_id的值相同是什么意思。你能解释一下吗?

检查Laravel码头https://laravel.com/docs/7.x/queries#where-条款。您写的where语句没有选项,child_birth_certificate_no列在哪里?也许等于什么?^_^

我认为处理这一问题的正确方法是向子迁移文件添加唯一约束

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

这样就可以防止无重复的child_birth_certificate_no被保存到数据库中。

最新更新