我有一个分配表(列的assignment_id,staff_name,asset_id,部门,日期,状态)
目前,我的工作分配表包含分配给员工及其部门的 Assets 的详细信息。
在代码中,我想检查asset_id是否已经存在且其状态=“ Activity ”,则插入应引发错误,但如果asset_id已经存在且其状态=“禁用”,则即使它是asset_id存在,插入也应继续进行。
另一方面,状态列的值为“禁用”表示当前未将 Assets 分配给某人,状态=“有效”表示该 Assets 当前已分配给某人,因为它已分配给某人,而您无法将其分配给某人为“有效” ”,但可以指定为“禁用”
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',它应该抛出一个错误而不是插入,因为您当前无法将一项 Assets 分配给其他人,但是如果要禁用,则插入。
这也是 Controller :
AssignmentsController
class AssignmentController extends Controller
{
public function add(Request $request){
$this->validate($request, [
'assignment_id' => '',
'staff_name' => 'required',
'asset_id' => 'required',
'department' => 'required',
'date' => 'required',
'status' => 'required'
]);
$assignments = new Assignment;
$assignments ->assignment_id = $request->input('assignment_id');
$assignments ->staff_id = $request->input('staff_name');
$assignments ->asset_id = $request->input('asset_id');
$assignments ->department_id = $request->input('department');
$assignments ->date = $request->input('date');
$assignments ->status = $request->input('status');
$count = Assignment::where('status', '=' ,'Active' )->
where('asset_id', '=' ,$assignments->asset_id)->
count();
if($count) {
abort(405, 'Trying to assign an already assigned asset');
}
$assignments ->save();
return redirect('/assignment/index') ->with('info', 'New Assignment Saved Successfully!');
}
当asset_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');
}
如果您理解,请提供帮助。提前致谢。
最佳答案
解决方案
$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');
}
正如IJas所建议的那样,我的代码中的错误是,我正在计算以前代码中的所有分配,并且如果有任何 Activity 状态,我会得到一个错误....我需要检查要分配的确切分配,激活或禁用,则分配将发生或与它的状态(激活/禁用)无关。谢谢你们。
关于php - Laravel-在插入之前检查记录是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47743569/