2017-08-15 16 views
0

大きな結果セットにカーソルを使用しようとしています。ドキュメントは、PHPを使用してGQLクエリでカーソルを使用することができますが、私はそれが動作するように見えることはできないことを示しています。制限とオフセットカーソルを使用したgoogle datastore gqlクエリですか?

誰もがこの仕事をしていますか?それがGQLクエリで動作しない場合は、誰かが私にこれを実装する方法の例を示すことができますか?

$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' 
            ] 
    ]); 

答えて

0

私はこれを理解しました。私はこれをGQLクエリから見つけることができませんでした。しかし、それは通常のクエリから可能です。

これは、Googleドキュメントが本当に悪い例であるので、誰かが助けてくれることを願っています。

$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 
     ); 

    } 

これはGoogleのクラウドデータストアのphp docsで提供されたこの機能で使用した方法です。

$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 
     } 
    } 
関連する問題