Php Laravel-插入前检查记录是否存在
我有一个分配表列分配id、员工姓名、资产id、部门、日期、状态 目前,我的分配表包含分配给工作人员及其部门的资产的详细信息 在代码中,我想检查资产标识是否已经存在,其状态为'Active',则插入应该抛出错误,但如果资产标识已经存在,且其状态为'Disable',则插入应该继续,即使资产标识已经存在 值为“禁用”的状态列表示资产当前未分配给某人。另一方面,状态=“活动”表示资产当前分配给某人,因为它分配给某人,您不能再次将其分配给其他人作为“活动”,但可以将其分配为“禁用”Php Laravel-插入前检查记录是否存在,php,laravel,laravel-5,error-handling,Php,Laravel,Laravel 5,Error Handling,我有一个分配表列分配id、员工姓名、资产id、部门、日期、状态 目前,我的分配表包含分配给工作人员及其部门的资产的详细信息 在代码中,我想检查资产标识是否已经存在,其状态为'Active',则插入应该抛出错误,但如果资产标识已经存在,且其状态为'Disable',则插入应该继续,即使资产标识已经存在 值为“禁用”的状态列表示资产当前未分配给某人。另一方面,状态=“活动”表示资产当前分配给某人,因为它分配给某人,您不能再次将其分配给其他人作为“活动”,但可以将其分配为“禁用” For Instan
For Instance
Assignment_id Staff Asset_id Department Status Date
1 Reynold AIO002 Logistics Disable 12.03.2014
2 Kyle AIO002 Business Dev Disable 12.04.2014
3 Trisha AIO002 Revenue Active 25.06.2015
4 Mary AIO002 Waybill Active 21.09.2015
假设assignment_id“4”是最后一次插入,它应该抛出一个错误,而不是插入,因为您当前不能将一个资产分配给不同的人,但如果它是“禁用”,则插入
这里还有控制器:
分配控制器
当资产id已经存在时,AssignmentsController中的以下变量和if语句总是在if语句中抛出错误,而不是检查其状态,并且插入没有发生
$count = Assignment::where('status', '=' ,'Active' )->
where('asset_id', '=' ,$assignments->asset_id)->
count();
if($count) {
abort(405, 'Trying to assign an already assigned asset');
}
如果你明白了,请帮忙。提前感谢。解决方案
正如所建议的,我的代码中的错误,我正在计算我以前代码中的所有分配,如果有任何活动状态,我会得到一个错误…我需要准确地检查我想要分配的分配是活动的还是禁用的,然后分配将发生,或者不与它的状态活动/禁用相关。谢谢大家。那么,在分配活动分配时,您是否遇到任何错误?或者它只是保存它?无论分配是激活的还是禁用的,它都会在中止函数中抛出消息。只有当对已经存在的特定资产的活动分配发生错误时(这是您在代码中的错误),才应该如此,您正在计算所有分配,如果存在任何活动分配,您将得到该错误……您需要准确地检查您要分配的分配!你能帮我更新一下控制器的代码吗?因为我不知道怎么做@lewis4uNo,不幸的是我没有时间…你需要编码和学习更多。您可以尝试在这里找到帮助:请解释,如何以及为什么,不要仅仅发布代码,还要适当地格式化代码。。如果你这样做。。。它阻止了我们所有人的否决和浪费时间。欢迎光临,尽情享受。审查结束。
$invoice_details = new invoiceDetail();
$invoice_details->date = date('Y-m-d',strtotime($request->date)); $invoice_details->invoice_id = $invoice->id;
$invoice_details->deptName_id = $request->deptName_id[$i];
$invoice_details->serialNo_id = $request->serialNo_id[$i];
$invoice_details->name = $request->name[$i];
$invoice_details->Status = '0';
$count = invoiceDetail::where('status', '=' ,'0' )->where('serialNo_id', '=' ,$invoice_details->serialNo_id)->count();
if($count)
{
return redirect()->back()->with('error', 'Sorry! You have been trying to insert double data');
}
$count = Assignment::where('asset_id', '=' ,$assignments->asset_id)->
where('status', '=' ,'Active')->
count();
if($count == 1 && $assignments->status != 'Disable') {
abort(405, 'Trying to assign an already assigned asset');
}
$invoice_details = new invoiceDetail();
$invoice_details->date = date('Y-m-d',strtotime($request->date)); $invoice_details->invoice_id = $invoice->id;
$invoice_details->deptName_id = $request->deptName_id[$i];
$invoice_details->serialNo_id = $request->serialNo_id[$i];
$invoice_details->name = $request->name[$i];
$invoice_details->Status = '0';
$count = invoiceDetail::where('status', '=' ,'0' )->where('serialNo_id', '=' ,$invoice_details->serialNo_id)->count();
if($count)
{
return redirect()->back()->with('error', 'Sorry! You have been trying to insert double data');
}