Athari / YaLinqo

Yet Another LINQ to Objects for PHP [Simplified BSD]
https://athari.github.io/YaLinqo
BSD 2-Clause "Simplified" License
441 stars 39 forks source link

Traversing query to XML #18

Closed nnita closed 8 years ago

nnita commented 8 years ago

al realizar la consulta

$xmlsort1 =  from($xdocsort1)
            ->select('$s ==>$s["PricedItineraries"]["PricedItinerary"]')
            ->orderBy('$s ==> $s["AirItineraryPricingInfo"]["ItinTotalFare"]["TotalFare"]["@attributes"]["Amount"]')
            ->thenBy('$s ==> $s["AirItinerary"]["OriginDestinationOptions"]["OriginDestinationOption"]["FlightSegment"]["TPA_Extensions"]["ValidateAirline"]');

me retorna este codigo

object(YaLinqo\OrderedEnumerable)#6363 (6) {
  ["source":"YaLinqo\OrderedEnumerable":private]=>
  object(YaLinqo\Enumerable)#6361 (1) {
    ["getIterator":"YaLinqo\Enumerable":private]=>
    object(Closure)#6362 (2) {
      ["static"]=>
      array(3) {
        ["self"]=>
        object(YaLinqo\Enumerable)#6351 (1) {
          ["getIterator":"YaLinqo\Enumerable":private]=>
          object(Closure)#6352 (1) {
            ["static"]=>
            array(1) {
              ["it"]=>
              object(ArrayIterator)#6350 (1) {
                ["storage":"ArrayIterator":private]=>
                array(3) {
                  ["@attributes"]=>
                  array(6) {
                    ["Version"]=>
                    string(1) "1"
                    ["CorrelationID"]=>
                    string(23) "39299486144985245710041"
                    ["EchoToken"]=>
                    string(36) "806228ad-94d0-4984-92d4-fd3d586051dd"
                    ["SequenceNmbr"]=>
                    string(1) "1"
                    ["TimeStamp"]=>
                    string(0) ""
                    ["TransactionIdentifier"]=>
                    string(1) "8"
                  }
                  ["Success"]=>
                  array(0) {
                  }

como puedo iterar o manejar el objeto , no puedo recorrerlo no puedo hacer nada con el .

Google Translate:

data handling

when making the request

I will return this code

as I can iterate or handle the object, I can not traverse I can not do anything with it

Athari commented 8 years ago

Please provide the code which you use to traverse the result sequence. Do you use foreach? Do you call toArray or toList? What happens? Is the sequence empty?

Please also set error_reporting = E_ALL in your configuration file or call error_reporting(-1) in your script for debugging purposes. Most likely, there's a missing array index and the warning about this is ignored by PHP because of your configuration.

The primary problem of your query is that you use select before orderBy and thenBy, which both rely on data you don't select. I think what you need is this:

$xmlsort1 =  from($xdocsort1)
    ->orderBy(...)
    ->thenBy(...)
    ->select(...);

Unlike SQL, which uses natural language and fixed order of statements, in LINQ transformations are applied sequentially, one after another. So usual "select - from - where" becomes "from - where - select".

PHP's print_r and var_dump functions aren't very useful for sequences. You can call toArray or toList methods to get plain old arrays and then dump their data.


Google Translate:

Por favor, indique el código que se utiliza para atravesar la secuencia resultado. Cómo se utiliza foreach? Cómo se llama toArray o toList? ¿Lo que pasa? Está vacía la secuencia?

Por favor también establecer error_reporting = E_ALL en el archivo de configuración o llame error_reporting (-1) en la secuencia de comandos para fines de depuración. Lo más probable es que hay un índice de matriz que falta y la advertencia acerca de esto es ignorado por PHP debido a su configuración.

El problema principal de la consulta es que se utiliza de select antes de orderBy y thenBy, que ambos se basan en los datos no se selecciona. Creo que lo que necesita es la siguiente:

$xmlsort1 =  from($xdocsort1)
    ->orderBy(...)
    ->thenBy(...)
    ->select(...);

Al igual que SQL, que utiliza el lenguaje natural y el orden fijo de declaraciones, en las transformaciones de LINQ se aplican de forma secuencial, una tras otra. Así que de costumbre "select - from - where" se convierte en "from - where - select".

Funciones print_r y var_dump de PHP no son muy útiles para las secuencias. Puede llamar a los métodos toArray o toList para obtener matrices llanura de edad y luego volcar sus datos.