在Symfony中,我使用Doctrine_Query查询数据库
$q = Doctrine_Query::create()
->from('User u')
->where('u.username = ?', $username)
->andWhere('u.password = ?', $password);
$user = $q->fetchArray();
问题是结果存储在数组中。有什么方法可以让它获取一个对象而不是一个数组?
此外,还有其他方法可以在Symfony中查询数据库,还是我必须使用Doctrine的函数?
答案 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坐标。我认为这是不言自明的。