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

标签 php laravel laravel-5 error-handling

我有一个分配表(列的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/

相关文章:

php - 如何在 laravel 中使用不同的迁移再添加一张表?

java - Web app需要与串口通信

javascript - 如何序列化存储在变量jQuery中的表单

php - 如何将 javascript var 的innerHTML 设置为 php/html 文本

javascript - 如何在元素未隐藏时有条件地设置必需的属性

php - laravel从另一个表获取用户信息问题

php - 多个路由文件而不是 laravel 5 中的一个主路由文件

php - 如何加入 Laravel 5.4 中的两个表

php - Laravel错误: Trying to get property of non-object when accessing via first() method

php - 在 Laravel 5.1 中获取过滤和关联的记录