我的代码如下所示,以获取包含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子句,我还需要更多吗?
答案 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文档,你可能会发现很多框架功能对于避免这种类型的代码很有用。老实说,如果可能的话,应该避免使用上述代码,您可以将其分解为查询范围和其他内容。