尝试使用 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 文档,您可能会发现很多框架功能对于避免此类代码很有用。老实说,如果可能的话,应该避免上面的代码,你可以把事情分解成查询范围和其他事情。
下面是我的代码,用于获取所有具有包含子句的条件的角色。
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 文档,您可能会发现很多框架功能对于避免此类代码很有用。老实说,如果可能的话,应该避免上面的代码,你可以把事情分解成查询范围和其他事情。