尝试使用if和else减少方法复杂性

时间:2017-10-21 21:41:16

标签: php laravel laravel-5.3 laravel-5.4 laravel-5.5

我的代码如下所示,以获取包含with子句的条件的所有角色。

public function GetRoles($IsParentRoleRelationNeeded) {
    try {
        if($IsParentRoleRelationNeeded) {
            $Roles =  RoleModel
                ::select("RoleID", "Role", "IsDefault", "ParentRoleID")
                ->with(["ParentRole" => function($query) {
                    $query->select("RoleID", 'Role', "ParentRoleID");
                }])
                ->get();
        }
        else {
            $Roles =  RoleModel
                ::select("RoleID", "Role", "IsDefault", "ParentRoleID")
                ->get();
        }
        return $Roles
    } catch (Exception $ex) {
        return $ex;
    }
}

现在,我正在尝试修改代码以有条件地添加union语句。

联盟声明在这里:

$Roles =  RoleModel::where("RoleID", 1)->first();

以下是功能签名。

public function GetRoles($IsParentRoleRelationNeeded, $IsUnionClauseNeeded) {
    try {
        if($IsParentRoleRelationNeeded) {
            $Roles =  RoleModel
                ::select("RoleID", "Role", "IsDefault", "ParentRoleID")
                ->with(["ParentRole" => function($query) {
                    $query->select("RoleID", 'Role', "ParentRoleID");
                }])
                ->get();
        }
        else {
            $Roles =  RoleModel
                ::select("RoleID", "Role", "IsDefault", "ParentRoleID")
                ->get();
        }
        return $Roles
    } catch (Exception $ex) {
        return $ex;
    }
}

我的问题是:如果要添加union子句,我还需要更多吗?

1 个答案:

答案 0 :(得分:1)

public function GetRoles($IsParentRoleRelationNeeded, $IsUnionClauseNeeded) {
       $Roles = RoleModel::select("RoleID", "Role", "IsDefault", "ParentRoleID"); // returns query builder

       if($IsParentRoleRelationNeeded) 
             $Roles->with(["ParentRole" => function($query) {
                   $query->select("RoleID", 'Role', "ParentRoleID");
              }]);

       if($IsUnionClauseNeeded)
             $Roles->where("RoleID", 1);


        try {
            return $Roles->get(); // execute query
        } catch (Exception $ex) {
            return $ex;
        }
}

是的,也像这样重构你的代码。

您可能会发现这个有用的Laravel REST API with query parameters

如果您这样做是为了向REST端点添加选项,那么您可能需要查看GRAPHQL

另外你应该阅读laravel文档,你可能会发现很多框架功能对于避免这种类型的代码很有用。老实说,如果可能的话,应该避免使用上述代码,您可以将其分解为查询范围和其他内容。