Skip to content

Instantly share code, notes, and snippets.

@alganet
Created September 5, 2012 01:47
Show Gist options
  • Save alganet/3629012 to your computer and use it in GitHub Desktop.
Save alganet/3629012 to your computer and use it in GitHub Desktop.
Respect\Database Thoughts
<?php
// Respect\Database is an easy API for any database with dead simple drivers
use Respect\Database\Data;
$data = new Data(array(
'p001' => new PDO(/*...*/),
'tweets' => new Mongo(/*...*/),
'timelines' => new Predis\Client(/*...*/),
'features' => new DOMDocument()
));
//Save a new Tweet
$data->twitter->tweets->persist(Http::get('http://api.twitter.com/SAMPLE_REQUEST'));
$data->twitter->tweets->flush();
$data->twitter->tweets[] = array(/*...*/); //why not? Imagine a loop with that inside
$data->twitter->tweets->flush();
$data->twitter->tweets->persist(array(/*...*/));
$data->twitter->tweets->flush();
$data->twitter->tweets->persist(new MyTwitterObject); //using public attributes, getters or setters
$data->flush(); //flush can be called on any fluent schema level
$data->twitter->tweets[12]->persist($something); //tries to set the primary key, empty [] tries to increment
$data->twitter->tweets->flush();
//Getting a tweet
$tweetId13 = $data->twitter->tweets[13]->fetch()->data;
$tweetsFromAlganet = $data->twitter->tweets(array('screen_name' => 'alganet')->fetch()->data;
//translate to popular db languages, infers what language is
$tweetsSpecificQuery = $data->twitter->tweets(Data::find(array('foo' => 'bar')))->fetch()->data;
//Saving a payment
$data->p001->debit->persist($myDebitWtf); //tries to infer identity key
$data->p001->debit[null]->insert($myDebitWtf); //increment
$data->p001->debit[12]->insert($myDebitWtf); // put
$data->p001->debit[12]->update($myDebitWtf); // specific update
$data->p001->debit->update($myDebitWtf); // group update
$data->p001->debit[12]['name'] = 'Foo'; // ultra quick updater (uses unity of work before flush)
$data->p001->debit[12]['name']->{'+'}(5)->persist(); // ultra quick native db operations MySQL
$data->twitter->tweet_counts->user[12]['tweets']->{'$add'}(1)->persist(); // ultra quick native db operations Mongo
//Random Stuff
$data->timelines->foo = 10; //Redis SET
$data->timelines->activity->HINCRBY('soccer', 5)->persist(); //Redis Sample
$data->some_mssql->{'catalog.schema'}->some_table(Data::max(5))->fetch()->data;
$data->twitter['tweets.stats.new_users']->fetchAll()->data;
$data->p001->debit[126]->user['name'] = 'Panda';
$data->i001->issues->bugs[$bugId]->assinged_by[$userId]->user['bugs_assigned']->{'+'}()->persist(); //yay
$data->twitter->users('id', $data->p001->debit->user)->fetch()->data; //mix
$data->twitter->users('id', $data->p001->debit->user)->persist($paymentUserInsideTwitterUser); //why not
$data->p001->debit['ammount']->{'+'}(0.1)->persist(); // quick where operation
$data->p001->debit(Data::groupBy('ammount as a'))->fetch()->data['a']; //yay
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment