示例#1
0
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();
示例#2
0
{
}
$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();
示例#3
0
{
}
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();