【问题标题】:Symfony/Doctrine: fetching data as objectSymfony/Doctrine:将数据作为对象获取
【发布时间】:2011-07-17 23:59:49
【问题描述】:

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

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

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

另外,有没有其他方法可以在 Symfony 中查询数据库,或者我必须使用 Doctrine 的函数?

【问题讨论】:

  • 您的问题的目的是什么?但是在 Doctrine 中实现了一个迭代器接口。你可以通过foreach。

标签: php database symfony1 doctrine


【解决方案1】:

你可以使用

$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();

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

【讨论】:

  • 谢谢,这正是我需要的。
猜你喜欢
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2018-02-15
  • 2019-01-05
相关资源
最近更新 更多