public function testScopeWithRelations() { $user1 = User::model()->with('posts:post23')->findByPk(2); $user2 = User::model()->with(array('posts' => array('scopes' => 'post23')))->findByPk(2); $user3 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => 'post23')))); //ensure alais overloading work correctly $user4 = User::model()->with(array('posts:post23A' => array('alias' => 'alias')))->findByPk(2); $user5 = User::model()->with(array('posts' => array('scopes' => 'post23A', 'alias' => 'alias')))->findByPk(2); $user6 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => 'post23A', 'alias' => 'alias')))); foreach (array($user1, $user2, $user3, $user4, $user5, $user6) as $user) { $this->assertEquals(2, count($user->posts)); $this->assertEquals(2, $user->posts[0]->id); $this->assertEquals(3, $user->posts[1]->id); } $user1 = User::model()->with(array('posts' => array('scopes' => array('p' => 4))))->findByPk(2); $user2 = User::model()->with(array('posts' => array('scopes' => array('p' => array(4)))))->findByPk(2); $user3 = User::model()->with(array('posts' => array('scopes' => array(array('p' => 4)))))->findByPk(2); $user4 = User::model()->with(array('posts' => array('scopes' => array(array('p' => array(4))))))->findByPk(2); $user5 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array('p' => 4))))); $user6 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array('p' => array(4)))))); $user7 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array(array('p' => 4)))))); $user8 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array(array('p' => array(4))))))); foreach (array($user1, $user2, $user3, $user4, $user5, $user6, $user7, $user8) as $user) { $this->assertEquals(1, count($user->posts)); $this->assertEquals(4, $user->posts[0]->id); } $user = UserSpecial::model()->findByPk(2); $posts = $user->posts; $this->assertEquals(2, count($posts)); $this->assertEquals(2, $posts[0]->id); $this->assertEquals(3, $posts[1]->id); $user = UserSpecial::model()->findByPk(2); $posts = $user->posts(array('params' => array(':id1' => 4), 'order' => 'posts.id DESC')); $this->assertEquals(2, count($posts)); $this->assertEquals(4, $posts[0]->id); $this->assertEquals(3, $posts[1]->id); $user = User::model()->with('posts:post23')->findByPk(2); $posts = $user->posts(array('scopes' => 'post23')); $this->assertEquals(2, count($posts)); $this->assertEquals(2, $posts[0]->id); $this->assertEquals(3, $posts[1]->id); //related model behavior scope $user1 = User::model()->with('posts:behaviorPost23')->findByPk(2); $user2 = User::model()->with(array('posts' => array('scopes' => 'behaviorPost23')))->findByPk(2); $user3 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => 'behaviorPost23')))); foreach (array($user1, $user2, $user3) as $user) { $this->assertEquals(2, count($user->posts)); $this->assertEquals(2, $user->posts[0]->id); $this->assertEquals(3, $user->posts[1]->id); } //related model with behavior parametrized scope $user1 = User::model()->with(array('posts' => array('scopes' => array('behaviorP' => 4))))->findByPk(2); $user2 = User::model()->with(array('posts' => array('scopes' => array('behaviorP' => array(4)))))->findByPk(2); $user3 = User::model()->with(array('posts' => array('scopes' => array(array('behaviorP' => 4)))))->findByPk(2); $user4 = User::model()->with(array('posts' => array('scopes' => array(array('behaviorP' => array(4))))))->findByPk(2); $user5 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array('behaviorP' => 4))))); $user6 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array('behaviorP' => array(4)))))); $user7 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array(array('behaviorP' => 4)))))); $user8 = User::model()->findByPk(2, array('with' => array('posts' => array('scopes' => array(array('behaviorP' => array(4))))))); foreach (array($user1, $user2, $user3, $user4, $user5, $user6, $user7, $user8) as $user) { $this->assertEquals(1, count($user->posts)); $this->assertEquals(4, $user->posts[0]->id); } //related model with 'scopes' as relation option $user = User::model()->with('postsOrderDescFormat1')->findByPk(2); $this->assertEquals(3, count($user->postsOrderDescFormat1)); $this->assertEquals(array(4, 3, 2), array($user->postsOrderDescFormat1[0]->id, $user->postsOrderDescFormat1[1]->id, $user->postsOrderDescFormat1[2]->id)); $user = User::model()->with('postsOrderDescFormat2')->findByPk(2); $this->assertEquals(3, count($user->postsOrderDescFormat2)); $this->assertEquals(array(4, 3, 2), array($user->postsOrderDescFormat2[0]->id, $user->postsOrderDescFormat2[1]->id, $user->postsOrderDescFormat2[2]->id)); }
public function testScopeWithRelations() { $user = User::model()->with('posts:post23')->findByPk(2); $this->assertEquals(2, count($user->posts)); $this->assertEquals(2, $user->posts[0]->id); $this->assertEquals(3, $user->posts[1]->id); $user = UserSpecial::model()->findByPk(2); $posts = $user->posts; $this->assertEquals(2, count($posts)); $this->assertEquals(2, $posts[0]->id); $this->assertEquals(3, $posts[1]->id); $user = UserSpecial::model()->findByPk(2); $posts = $user->posts(array('params' => array(':id1' => 4), 'order' => 'posts.id DESC')); $this->assertEquals(2, count($posts)); $this->assertEquals(4, $posts[0]->id); $this->assertEquals(3, $posts[1]->id); }