2017-08-15 3 views
0

J'essaie d'utiliser des curseurs pour les grands ensembles de résultats. La documentation indique que vous pouvez utiliser des curseurs avec une requête GQL en utilisant php mais je n'arrive pas à le faire fonctionner.google datastore Requête gql avec curseurs de limite et de décalage?

Est-ce que quelqu'un a ce travail? Si cela ne fonctionne pas avec la requête GQL, quelqu'un pourrait-il me montrer un exemple de la façon de l'implémenter?

$query = $datastore->gqlQuery('SELECT * FROM h_stats WHERE field1 = @parm1 AND date >= @startDate AND date < @endDate LIMIT @limitBy OFFSET @cursor', [ 
            'bindings' => [ 
            'parm1' => '5700305828184064', 
            'startDate' => '1501545600', 
            'endDate' => '1501632000', 
            'limitBy' => 10, 
            'cursor' => 'CURSOR_STRING_HERE' 
            ] 
    ]); 

Répondre

0

Je l'ai compris. Je ne pouvais pas trouver cela possible à partir d'une requête GQL. Mais c'est possible à partir d'une requête normale.

Espérons que cela aide quelqu'un parce que les google docs sont vraiment mauvais avec des exemples.

$datastore = new Google\Cloud\Datastore\DatastoreClient([ 
    'projectId' => $projectId, 
]); 


    function cursor_paging($datastore, $queryKind, $pageSize, $parm1, $startDate, $endDate, $pageCursor = '') 
    { 

     $query = $datastore->query() 
      ->kind($queryKind) 
      ->filter('field1', '=', $parm1) 
      ->filter('date', '>=', $startDate) 
      ->filter('date', '<', $endDate) 
      ->limit($pageSize) 
      ->start($pageCursor);  

     $result = $datastore->runQuery($query); 
     $nextPageCursor = ''; 
     $entities = []; 

     foreach ($result as $entity) { 
      $nextPageCursor = $entity->cursor(); 
      $entities[] = $entity; 
     } 
     return array(
      'nextPageCursor' => $nextPageCursor, 
      'entities' => $entities 
     ); 

    } 

C'est ainsi que je l'ai utilisé avec cette fonction qui était fournie dans les docs php datastore de google cloud.

$pageSize = 500; 
    $queryKind = "your_kind"; 
    $result = cursor_paging($datastore, $queryKind, $pageSize, $currentThermostat, $startDate, $endDate); 

    $countRows = 0; 

    for ($x=0; $x < $pageSize; $x++) { 

     $counter = 0; 

     foreach ($result['entities'] as $item) { 
      print($countRows . " " . $item['data']); 
      $countRows++; 
      $counter++; 
     } 

     $result = cursor_paging($datastore, $queryKind, $pageSize, $currentThermostat, $startDate, $endDate, $result['nextPageCursor']); 

     if ($counter > 0) { 
      $x = 0; 
     } else { 
      $x = $pageSize; //exit loop when no more results 
     } 
    }