That would cause memory usage issue (too many model objects) We should also consider the object construction in the import process, we should share the same record class in the same collection section. Here is the specification: ....
 public function testRecursiveExporting()
 {
     $author = new Author();
     $ret = $author->create(array('name' => 'Z', 'email' => 'z@z', 'identity' => 'z'));
     $this->assertResultSuccess($ret);
     // Has Many Relationship
     $author->addresses->create(['address' => 'far far away']);
     $author->addresses->create(['address' => 'taipei 101']);
     $author->addresses->create(['address' => 'brazil']);
     $author->addresses->create(['address' => 'san francisco']);
     $book = new Book();
     $ret = $book->create(['title' => 'Run & Skate']);
     $this->assertResultSuccess($ret);
     // ManyToMany
     $author->author_books->create(['book_id' => $book->id]);
     $book = new Book();
     $ret = $book->create(['title' => 'Run & Skate II']);
     $this->assertResultSuccess($ret);
     $author->author_books->create(['book_id' => $book->id]);
     $exporter = new XMLExporter();
     $dom = $exporter->exportRecord($author);
     $dom->formatOutput = true;
     $this->assertInstanceOf('DOMDocument', $dom);
     $xml = $dom->saveXML();
     $this->assertNotEmpty($xml);
     // echo $xml;
 }
 public function testRecursiveExporting()
 {
     $author = new Author();
     $ret = $author->create(array('name' => 'Z', 'email' => 'z@z', 'identity' => 'z', 'updated_on' => '2012-01-01 00:00:00', 'created_on' => '2012-01-01 00:00:00'));
     $this->assertResultSuccess($ret);
     // Has Many Relationship
     $author->addresses->create(['address' => 'far far away']);
     $author->addresses->create(['address' => 'taipei 101']);
     $author->addresses->create(['address' => 'brazil']);
     $author->addresses->create(['address' => 'san francisco']);
     $book = new Book();
     $ret = $book->create(['title' => 'Run & Skate', 'published_at' => '2012-01-01 00:00:00', 'updated_on' => '2012-01-01 00:00:00', 'created_on' => '2012-01-01 00:00:00', 'is_selled' => false]);
     $this->assertResultSuccess($ret);
     // ManyToMany
     $author->author_books->create(['book_id' => $book->id, 'created_on' => '2012-01-01 00:00:00']);
     $book = new Book();
     $ret = $book->create(['title' => 'Run & Skate II', 'updated_on' => '2012-01-01 00:00:00', 'created_on' => '2012-01-01 00:00:00', 'published_at' => '2012-01-01 00:00:00', 'is_selled' => false]);
     $this->assertResultSuccess($ret);
     $author->author_books->create(['book_id' => $book->id, 'created_on' => '2012-01-01 00:00:00']);
     $exporter = new XMLExporter();
     $dom = $exporter->exportRecord($author);
     $dom->formatOutput = true;
     $this->assertInstanceOf('DOMDocument', $dom);
     $xml = $dom->saveXML();
     $this->assertNotEmpty($xml);
     file_put_contents('tests/xmlTestRecursiveExporting.actual', $xml);
     $this->assertFileEquals('tests/xmlTestRecursiveExporting.expected', 'tests/xmlTestRecursiveExporting.actual');
 }