Esempio n. 1
0
 /**
  * @coversNothing
  */
 public function testLoadWith()
 {
     $users = User::findAll()->loadWith(['address', 'posts' => 'tags']);
     $this->assertCount(4, $users);
     $user = $users->getFirst();
     $this->assertEquals(1, $user->id);
     $this->assertEquals(1, $user->getAddress()->id);
     $this->assertCount(1, $user->getPosts());
     $this->assertEquals(1, $user->getPosts()->getFirst()->id);
     $this->assertCount(2, $user->getPosts()->getFirst()->getTags());
     $this->assertEquals([1, 2], $user->getPosts()->getFirst()->getTags()->get()->getIds());
     $user = $users->getNext();
     $this->assertEquals(2, $user->id);
     $this->assertTrue($user->getAddress()->isVoid());
     $this->assertCount(0, $user->getPosts());
     $user = $users->getNext();
     $this->assertEquals(3, $user->id);
     $this->assertTrue($user->getAddress()->isVoid());
     $this->assertCount(1, $user->getPosts());
     $this->assertInstanceof('Harp\\Harp\\Test\\TestModel\\BlogPost', $user->getPosts()->getFirst());
     $this->assertEquals(4, $user->getPosts()->getFirst()->id);
     $this->assertCount(0, $user->getPosts()->getFirst()->getTags());
     $user = $users->getNext();
     $this->assertEquals(4, $user->id);
     $this->assertEquals(2, $user->getAddress()->id);
     $posts = $user->getPosts();
     $this->assertCount(2, $posts);
     $post = $posts->getFirst();
     $this->assertEquals(2, $post->id);
     $this->assertCount(0, $post->getTags());
     $post = $posts->getNext();
     $this->assertEquals(3, $post->id);
     $this->assertCount(1, $post->getTags());
     $this->assertEquals([2], $post->getTags()->get()->getIds());
     $this->assertQueries(['SELECT `User`.* FROM `User` WHERE (`User`.`deletedAt` IS NULL)', 'SELECT `Address`.* FROM `Address` WHERE (`id` IN (1, 2))', 'SELECT `Post`.`class`, `Post`.* FROM `Post` WHERE (`userId` IN (1, 2, 3, 4))', 'SELECT `Tag`.*, `postTags`.`postId` AS `tagsKey` FROM `Tag` JOIN `PostTag` AS `postTags` ON `postTags`.`tagId` = `Tag`.`id` WHERE (`postTags`.`postId` IN (1, 2, 3, 4))']);
 }