select($query, $argsArray); $value = $values[0]->data; $json = LuStringUtils::convertJsonString($value); $dboValues = call_user_func([static::$_dboArrayClass, 'jsonDeserialize'], $json)->getArray(); return $dboValues; } /** * @param $args array * @return LuDbo|null */ public static function getSingle($args) { $argsArray = static::getArgsArray($args); $query = static::getSqlSelectQuery($args); $values = static::getConnection()->select($query, $argsArray); $value = $values[0]->data; $json = LuStringUtils::convertJsonString($value); if (count($json) < 1 || is_null($json[0])) { return null; } $dboValue = call_user_func([static::$_dboArrayClass, 'jsonDeserialize'], $json)->getArray()[0]; return $dboValue; } /** * @param $args array * @param $page int The page number, 0 based * @param $perPage int The number of items per page * @return LuMultipleDbo */ public static function getMultiplePaginated($args, $page, $perPage) { $argsArray = static::getArgsArray($args); $argsArray[":_page"] = $page; $argsArray[":_perPage"] = $perPage; $storedProcedure = static::$_storedProcedure; $argsString = implode(", ", array_map(function($i) { return ":_arg" . $i; }, range(0, count($args) - 1))); $query = "SELECT (SELECT count(*) FROM ${storedProcedure}(${argsString})) as count, (SELECT COALESCE(json_agg(data), '[]'::json) FROM (SELECT data FROM ${storedProcedure}(${argsString}) data OFFSET (:_page::int * :_perPage::int) LIMIT :_perPage) data) as data"; $values = static::getConnection()->select($query, $argsArray); $value = $values[0]; if (is_null($value->data)) { $value->data = '[]'; } $json = LuStringUtils::convertJsonString($value->data); $dboValues = call_user_func([static::$_dboArrayClass, 'jsonDeserialize'], $json)->getArray(); return new LuMultipleDbo($value->count, $dboValues); } }