尝试使用 if 和 else 降低方法的复杂性

Trying to decrease a method complexity with if and else

下面是我的代码,用于获取所有具有包含子句的条件的角色。

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;
    }
}

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

工会声明在这里:

$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;
    }
}

我的问题是:我是否需要更多 if else 来添加 union 子句?

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 文档,您可能会发现很多框架功能对于避免此类代码很有用。老实说,如果可能的话,应该避免上面的代码,你可以把事情分解成查询范围和其他事情。