Created
September 5, 2012 01:47
-
-
Save alganet/3629012 to your computer and use it in GitHub Desktop.
Respect\Database Thoughts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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