我正在使用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 );
答案 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() )
);
}