Расшифровка результата запроса datastax cassandra в php

Я использую 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 );

person DJM    schedule 13.10.2015    source источник


Ответы (2)


value — это функция, а не свойство, поэтому вам придется сделать $row['latitude']->value()

person Alex Popescu    schedule 14.10.2015

Как сказал Алекс, в вашем примере value не является свойством. Вместо этого проверьте документацию класса, который вы пытаетесь декодировать. Документацию можно найти здесь.

Если вы не уверены, с каким классом имеете дело, вы можете использовать встроенную функцию get_class() - см. руководство по get_class().

Как только вы узнаете, с каким классом имеете дело, вы можете проверить документацию драйвера PHP DataStax, чтобы узнать, какую функцию вам нужно вызвать, чтобы получить правильное значение.

Например, если вы имеете дело с классом Cassandra\Timestamp, вам придется вызвать функцию time(), чтобы получить время как int. см. документацию по меткам времени.

В вашем случае вы, скорее всего, имеете дело с Float, поэтому проверьте документацию Float и убедитесь, что вам нужно вызвать функцию 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() )
    );
}
person ChickenFeet    schedule 28.06.2017