繁体   English   中英

Laravel:在插入之前检查记录是否存在

[英]Laravel: Check if record exists Before Insertion

我有两个表: assignments表(列assignment_idStaff Nameasset_iddepartmentdatestatus ),以及assets表(列asset_idtag_nameserial_numbermodel_numbercolor )。 资产表列与分配表链接。 我想在分配表中执行插入操作,但是在插入之前,我想检查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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM