Пример #1
0
 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);
 }