+1, actually I'd like to see magic getters / setters in models.
First, if properties are stored internally in some kind of a parameter bag (represented with array for instance) it saves performance issue in PHP5.4
Next, it makes models testing easier if fixtures can be injected into a model via __set_state call
Example:
$resultSet = $database->query('SELECT col1, col2, col3 FROM table WHERE param1 = ?', array('blah'), new ModelPrototype());
foreach($resultSet as $result) {
}
So when you traverse through $resultSet it does
$result = clone $modelPrototype;
$result->exchangeArray( $statement->fetch(\PDO::FETCH_ASSOC) );
---
In this way you add another way of working with models.
---
As for fetching related records: how are you going to solve N+1 problem?
I really hate when you pull a big resultset in Doctrine and when accessing related records it does another select for each of them. When you normally can SELECT ... JOIN stuff in the most efficient way, ORM normally sucks here.