Collections
PHP Driver supports all Cassandra collections
Background
- Given
- a running Cassandra cluster
Using Cassandra collections
- Given
- the following schema:
CREATE KEYSPACE simplex WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': 1 }; USE simplex; CREATE TABLE user ( id int PRIMARY KEY, logins list<timestamp>, locations map<timestamp, double>, ip_addresses set<inet> ); INSERT INTO user (id, logins, locations, ip_addresses) VALUES ( 0, ['2014-09-11 10:09:08+0000', '2014-09-12 10:09:00+0000'], {'2014-09-11 10:09:08+0000': 37.397357}, {'200.199.198.197', '192.168.1.15'} );
- And
- the following example:
$cluster = Dse::cluster()->build(); $session = $cluster->connect("simplex"); $statement = new Dse\SimpleStatement("SELECT * FROM user"); $result = $session->execute($statement); $row = $result->first(); echo "Logins:" . PHP_EOL; foreach ($row['logins'] as $login) { echo " {$login}" . PHP_EOL; } echo "Locations:" . PHP_EOL; foreach ($row['locations'] as $key => $location) { echo " {$key} => {$location}" . PHP_EOL; } echo "Ip Addresses:" . PHP_EOL; foreach ($row['ip_addresses'] as $ip_address) { echo " {$ip_address}" . PHP_EOL; }
- When
- it is executed
- Then
- its output should contain:
Logins: 1410430148000 1410516540000 Locations: 1410430148000 => 37.397357 Ip Addresses: 192.168.1.15 200.199.198.197
since cassadra v2.1
Using Cassandra nested collections
- Given
- the following schema:
CREATE KEYSPACE simplex WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': 1 }; USE simplex; CREATE TABLE users ( id uuid PRIMARY KEY, name text, addresses map<text, frozen<map<text, text>>> );
- And
- the following example:
$cluster = Dse::cluster()->build(); $session = $cluster->connect("simplex"); $statement = new Dse\SimpleStatement( "INSERT INTO users (id, name, addresses) VALUES (?, ?, ?)"); $addressType = Dse\Type::map(Dse\Type::text(), Dse\Type::text()); $addressesType = Dse\Type::map(Dse\Type::text(), $addressType); $users = array( array( new Dse\Uuid('56357d2b-4586-433c-ad24-afa9918bc415'), 'Charles Wallace', $addressesType->create( 'home', $addressType->create( 'city', 'Phoenix', 'street', '9042 Cassandra Lane', 'zip', '85023')) ), array( new Dse\Uuid('ce359590-8528-4682-a9f3-add53fc9aa09'), 'Kevin Malone', $addressesType->create( 'home', $addressType->create( 'city', 'New York', 'street', '1000 Database Road', 'zip', '10025') ) ), array( new Dse\Uuid('7d64dca1-dd4d-4f3c-bec4-6a88fa082a13'), 'Michael Scott', $addressesType->create( 'work', $addressType->create( 'city', 'Santa Clara', 'street', '20000 Log Ave', 'zip', '95054')) ) ); foreach ($users as $user) { $options = array('arguments' => $user); $session->execute($statement, $options); } $statement = new Dse\SimpleStatement("SELECT * FROM users"); $result = $session->execute($statement); foreach ($result as $row) { echo "ID: {$row['id']}" . PHP_EOL; echo "Name: {$row['name']}" . PHP_EOL; echo "Addresses" . PHP_EOL; $addresses = $row['addresses']; foreach ($addresses->keys() as $type) { echo " {$type}:" . PHP_EOL; foreach ($addresses->get($type) as $name => $value) { echo " {$name} => {$value}" . PHP_EOL; } } }
- When
- it is executed
- Then
- its output should contain:
ID: 56357d2b-4586-433c-ad24-afa9918bc415 Name: Charles Wallace Addresses home: city => Phoenix street => 9042 Cassandra Lane zip => 85023 ID: ce359590-8528-4682-a9f3-add53fc9aa09 Name: Kevin Malone Addresses home: city => New York street => 1000 Database Road zip => 10025 ID: 7d64dca1-dd4d-4f3c-bec4-6a88fa082a13 Name: Michael Scott Addresses work: city => Santa Clara street => 20000 Log Ave zip => 95054