ORM::for_table('widget')->find_one(5); $expected = "SELECT * FROM `widget` WHERE `primary_key` = '5' LIMIT 1"; Tester::check_equal("Setting: id_column", $expected); ORM::configure('id_column_overrides', array('widget' => 'widget_id', 'widget_handle' => 'widget_handle_id')); ORM::for_table('widget')->find_one(5); $expected = "SELECT * FROM `widget` WHERE `widget_id` = '5' LIMIT 1"; Tester::check_equal("Setting: id_column_overrides, first test", $expected); ORM::for_table('widget_handle')->find_one(5); $expected = "SELECT * FROM `widget_handle` WHERE `widget_handle_id` = '5' LIMIT 1"; Tester::check_equal("Setting: id_column_overrides, second test", $expected); ORM::for_table('widget_nozzle')->find_one(5); $expected = "SELECT * FROM `widget_nozzle` WHERE `primary_key` = '5' LIMIT 1"; Tester::check_equal("Setting: id_column_overrides, third test", $expected); ORM::for_table('widget')->use_id_column('new_id')->find_one(5); $expected = "SELECT * FROM `widget` WHERE `new_id` = '5' LIMIT 1"; Tester::check_equal("Instance ID column, first test", $expected); ORM::for_table('widget_handle')->use_id_column('new_id')->find_one(5); $expected = "SELECT * FROM `widget_handle` WHERE `new_id` = '5' LIMIT 1"; Tester::check_equal("Instance ID column, second test", $expected); ORM::for_table('widget_nozzle')->use_id_column('new_id')->find_one(5); $expected = "SELECT * FROM `widget_nozzle` WHERE `new_id` = '5' LIMIT 1"; Tester::check_equal("Instance ID column, third test", $expected); // Test caching. This is a bit of a hack. ORM::configure('caching', true); ORM::for_table('widget')->where('name', 'Fred')->where('age', 17)->find_one(); ORM::for_table('widget')->where('name', 'Bob')->where('age', 42)->find_one(); $expected = ORM::get_last_query(); ORM::for_table('widget')->where('name', 'Fred')->where('age', 17)->find_one(); // this shouldn't run a query! Tester::check_equal("Caching, same query not run twice", $expected); Tester::report();
{ } $user = new User(); $user->name = "Ted"; $user->age = 22; $user->save(); // Quick sanity check for inserting rows without a transaction Tester::check_equal('Insert ID for first insert', (int) $user->id, 1); $count = Model::factory('User')->count(); Tester::check_equal('Row count after first insert', $count, 1); // Test rolling back a transaction Model::start_transaction(); $user = new User(); $user->name = "Frank"; $user->age = 15; $user->save(); Tester::check_equal('Insert ID for insert to rollback', (int) $user->id, 2); Model::rollback(); $count = Model::factory('User')->count(); Tester::check_equal('Row count after rollback', $count, 1); // Test committing a transaction Model::start_transaction(); $user = new User(); $user->name = "Frank"; $user->age = 15; $user->save(); Tester::check_equal('Insert ID for insert to commit', (int) $user->id, 2); Model::commit(); $count = Model::factory('User')->count(); Tester::check_equal('Row count after commit', $count, 2); Tester::report();
{ } class Book extends Model { public function authors() { return $this->has_many_through('Author'); } } $book = Model::factory('Book')->find_one(1); $authors = $book->authors()->find_many(); $expected = "SELECT `author`.* FROM `author` JOIN `author_book` ON `author`.`id` = `author_book`.`author_id` WHERE `author_book`.`book_id` = '1'"; Tester::check_equal("has_many_through relation", $expected); class AuthorTwo extends Model { } class WroteTheBook extends Model { } class BookTwo extends Model { public function authors() { return $this->has_many_through('AuthorTwo', 'WroteTheBook', 'custom_book_id', 'custom_author_id'); } } $book2 = Model::factory('BookTwo')->find_one(1); $authors2 = $book2->authors()->find_many(); $expected = "SELECT `author_two`.* FROM `author_two` JOIN `wrote_the_book` ON `author_two`.`id` = `wrote_the_book`.`custom_author_id` WHERE `wrote_the_book`.`custom_book_id` = '1'"; Tester::check_equal("has_many_through relation with custom intermediate model and key names", $expected); Tester::report();