做你想做的事情的方法是使用定制水化器 http://www.doctrine-project.org/projects/orm/1.2/docs/manual/data-hydrators/hu#writing-hydration-method.
class Doctrine_Hydrator_MyHydrator extends Doctrine_Hydrator_ArrayHierarchyDriver
{
public function hydrateResultSet($stmt)
{
$results = parent::hydrateResultSet($stmt);
$array = array();
$array[] = array('User' => array(
'id' => $results['User']['id'],
'username' => $results['User']['username'],
'first_name' => $results['Profile']['first_name'],
'last_name' => $results['Profile']['last_name'],
));
return $array();
}
}
然后向连接管理器注册您的水化器:
$manager->registerHydrator('my_hydrator', 'Doctrine_Hydrator_MyHydrator');
然后你像这样补充你的查询:
$query = Doctrine_Query::create()
->select('u.id, u.username, p.first_name, p.last_name')
->from('User u')
->leftJoin('Profile p')
->where('u.username = ?', $username);
$result = $query->fetchOne(array(), 'my_hydrator');
print_r($result);
/* outputs */
Array (
"User" => Array (
"id" => 1,
"username" => "jschmoe",
"first_name" => "Joseph",
"last_name" => "Schmoe"
)
)
您可能需要稍微微调水化器逻辑才能获得您想要的精确数组结构。但这是做你想做的事情的可接受的方式。