/**
  * Select a single entity using an EntitySelector instance.
  *
  * @param  Connection     $connection A connection instance
  * @return EntitySelector A selector instance
  */
 public static function selectOne(Connection $connection)
 {
     $selector = new EntitySelector(AbstractSelector::fromConnection($connection, static::$table, static::$types), get_called_class());
     return $selector->one();
 }
 public function testExecuteOneWithHasMany()
 {
     $author_statement = $this->getMockBuilder('Doctrine\\DBAL\\Statement')->disableOriginalConstructor()->getMock();
     $author_statement->expects($this->once())->method('execute')->with([]);
     $result = ['name' => 'author', 'id' => 1];
     $author_statement->expects($this->once())->method('fetch')->will($this->returnValue($result));
     $book_statement = $this->getMockBuilder('Doctrine\\DBAL\\Statement')->disableOriginalConstructor()->getMock();
     $book_statement->expects($this->once())->method('execute')->with([1]);
     $book_statement->expects($this->exactly(3))->method('fetch')->will($this->onConsecutiveCalls(['name' => 'foo'], ['name' => 'bar'], false));
     $this->conn->expects($this->exactly(2))->method('prepare')->with($this->logicalOr('SELECT * FROM `authors` LIMIT 1', 'SELECT * FROM `books` WHERE `authors_id` = ?'))->will($this->onConsecutiveCalls($author_statement, $book_statement));
     $entity_class = 'ActiveDoctrine\\Tests\\Fixtures\\Bookshop\\Author';
     $selector = new EntitySelector(new MysqlSelector($this->conn, 'authors'), $entity_class);
     $author = $selector->one()->with('books')->execute();
     $this->assertInstanceOf('ActiveDoctrine\\Tests\\Fixtures\\Bookshop\\Author', $author);
     $this->assertSame('author', $author->name);
     $books = $author->getRelation('books');
     $this->assertInstanceOf('ActiveDoctrine\\Entity\\EntityCollection', $books);
     $this->assertSame(2, count($books));
     $this->assertSame(['foo', 'bar'], $books->getColumn('name'));
 }