/** * 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')); }