Rai*_*ain 4 php database doctrine symfony1
在Symfony中,我使用Doctrine_Query来查询数据库
$q = Doctrine_Query::create()
->from('User u')
->where('u.username = ?', $username)
->andWhere('u.password = ?', $password);
$user = $q->fetchArray();
Run Code Online (Sandbox Code Playgroud)
问题是结果存储在一个数组中.有什么方法可以让它获取一个对象而不是一个数组?
另外,有没有其他方法可以在Symfony中查询数据库,还是我必须使用Doctrine的函数?
Ada*_*old 11
您可以使用
$q->fetchOne()
Run Code Online (Sandbox Code Playgroud)
获取一个记录(对象)或
$q->excute()
Run Code Online (Sandbox Code Playgroud)
获取一组对象.
我几乎每次使用symfony时都会使用这些.有时您需要获取数组,在这种情况下,如果您有嵌套集,可以使用数据水合,如HYDRATE_ARRAY或HYDRATE_ARRAY_HIERARCHY.
至于原始查询,请查看:doctrine中的原始sql
编辑:
我只需要自己使用原始查询,这就是它在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();
Run Code Online (Sandbox Code Playgroud)
此查询返回5个最接近城市的数组到lat/lng坐标.我认为这是不言自明的.