php中的datastax cassandra查询结果解码

时间:2015-10-13 15:59:09

标签: cassandra datastax cqlsh

我正在使用Cassandra并使用Datastax PHP CQL。

鉴于以下查询,我应该如何解码结果?

$cql = SELECT * FROM  company WHERE userid = 1001 ORDER BY gpsTime DESC LIMIT 1;                           
$statement = new Cassandra\SimpleStatement($cql);
$result = $this->session->execute($statement);

我尝试解码:

foreach($result as $row){
    // Get values from row and add to array
    array_push($allVehicleInfo,array(
        'userID'    => $row['userid']->value,
        'gpsTime'   => $row['gpstime']->seconds,
         'latitude' => $row['latitude']->value )
    );
}

然而,我收到错误:

  

消息:未定义属性:Cassandra \ Decimal :: $ value

我的表架构是:

$cql = "CREATE TABLE " company " (
    userID bigint,
    userName ascii,
    latitude decimal,
    longitude decimal,
    accuracy float,
    altitude float,
    gpsTime timestamp );

2 个答案:

答案 0 :(得分:1)

value是一个功能,而不是属性,因此您必须执行$row['latitude']->value()

答案 1 :(得分:0)

正如Alex所说,在你的例子中value不是属性。请查看您尝试解码的课程文档。 The documentation can be found here

如果您不确定自己要处理哪个课程,可以使用编译内部功能get_class() - see get_class() manual

一旦了解了您正在处理的类,就可以查看DataStax PHP驱动程序文档,了解需要调用哪个函数来检索正确的值。

例如,如果您正在处理Cassandra\Timestamp类,则必须调用time()函数以int的形式检索时间。 See Timestamp documentation

在您的情况下,您可能正在处理Float,因此请检查the Float documentation并查看是否需要调用函数value()来检索float Cassandra\Float实例的值。

代码解决方案:

foreach($result as $row){
    // Get values from row and add to array
    array_push($allVehicleInfo,array(
        'userID'    => $row['userid']->value(),
        'gpsTime'   => $row['gpstime']->seconds,
         'latitude' => $row['latitude']->value() )
    );
}