![](/img/trans.png)
[英]Check if hasMany Relationship Exists in Laravel 8 Before Deleting Record
[英]Laravel: Check if record exists Before Insertion
我有两个表: assignments
表(列assignment_id
, Staff Name
, asset_id
, department
, date
, status
),以及assets
表(列asset_id
, tag_name
, serial_number
, model_number
, color
)。 资产表列与分配表链接。 我想在分配表中执行插入操作,但是在插入之前,我想检查asset_id
已存在于分配表中,并且它的status
为“ Active”,则插入应该引发错误/应该不会发生。
AssignmentsController
class AssignmentController extends Controller
{
public function assignment(){
$assignments = Assignment::all();
return view('assignment/index', ['assignments' => $assignments]);
}
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_id');
$assignments ->asset_id = $request->input('asset_id');
$assignments ->department_id = $request->input('department_id');
$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!');
}
Assginment.php
class Assignment extends Model
{
protected $primaryKey = 'assignment_id';
public function asset()
{
return $this->belongsTo('App\Asset', 'asset_id');
}
}
下面的变量和AssignmentsController
中的if statement
始终在if语句中引发错误,无论该if statement
是否正确,并且不会发生插入,但是当清除整个语句时,就会发生插入。
$count = Assignment::where('status', '=' ,'Active' )->
where('asset_id', '=' ,$assignments->asset_id)->
count();
if($count) {
abort(405, 'Trying to assign an already assigned asset');
}
所以我想要一种方法来检查要插入的记录是否已经存在并具有条件,就好像asset_id
存在一样,然后检查它的status
如果它是='Active'),然后抛出一个错误,但如果不存在则发生插入。 如果您了解它,请帮助。 提前致谢。
您可以这样做:
public function add(Request $request){
$this->validate($request, [
'assignment_id' => '',
'staff_name' => 'required',
'asset_id' => 'required',
'department' => 'required',
'date' => 'required',
'status' => 'required'
]);
$assignment = Assignment::firstOrNew([
"status" => "Active",
"asset_id" => $assignments->asset_id
], $request->all());
abort_if($assignment->exists(), 405, 'Trying to assign an already assigned asset');
$assignment->save();
return redirect('/assignment/index')
->with('info', 'New Assignment Saved Successfully!');
}
解决方案
$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');
}
我代码中的错误:我正在计算所有分配,并且如果有任何活动状态,我会得到一个错误....我需要检查我想分配的分配是活动的还是禁用的,然后分配应该发生或与状态无关(有效/无效)。 谢谢你们,尤其是apokryfos 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.