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

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坐标.我认为这是不言自明的.