Symfony / Doctrine:将数据作为对象获取

时间:2011-03-18 08:25:04

标签: php database symfony1 doctrine

在Symfony中,我使用Doctrine_Query查询数据库

$q = Doctrine_Query::create()
      ->from('User u')
      ->where('u.username = ?', $username)
      ->andWhere('u.password = ?', $password);
$user = $q->fetchArray();

问题是结果存储在数组中。有什么方法可以让它获取一个对象而不是一个数组?

此外,还有其他方法可以在Symfony中查询数据库,还是我必须使用Doctrine的函数?

1 个答案:

答案 0 :(得分:11)

您可以使用

$q->fetchOne()

获取一条记录(对象)或

$q->excute()

获取一组对象。

我个人在使用symfony时几乎每次都使用这些。有时您需要获取数组,在这种情况下,如果您有嵌套集,可以使用数据水合,如HYDRATE_ARRAY或HYDRATE_ARRAY_HIERARCHY。

对于原始查询,请查看:raw sql in doctrine

修改

我必须自己使用原始查询,这就是它在symfony中的工作方式:

$pdo = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
$query = "SELECT name, slug,
     ( 3959 * acos( cos( radians(:lat) ) * cos( radians( lat ) )
      * cos( radians( lng ) - radians(:lng) ) + sin( radians(:lat) )
      * sin( radians( lat ) ) ) ) AS distance
    FROM rss_city WHERE (lat <> :lat and lng <> :lng)HAVING distance IS NOT NULL
    ORDER BY distance LIMIT 5";
$stmt = $pdo->prepare($query);
$params = array(
  "lat"   => $lat,
  "lng"   => $lng
);
$stmt->execute($params);
$results = $stmt->fetchAll();

此查询将5个最近城市的数组返回到我们的lat / lng坐标。我认为这是不言自明的。