Symfony / Doctrine: выборка данных как объекта - PullRequest
4 голосов
/ 18 марта 2011

В Symfony я использую Doctrine_Query для запроса к базе данных

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

Проблема в том, что результаты хранятся в массиве.Есть ли способ заставить его извлекать объект вместо массива?

Кроме того, есть ли другие способы, с помощью которых я могу запрашивать базу данных в Symfony или мне нужно использовать функции Doctrine?

1 Ответ

11 голосов
/ 18 марта 2011

Вы можете использовать

$q->fetchOne()

для извлечения одной записи (объекта) или

$q->excute()

для извлечения группы объектов.

Я лично использую эти почтикаждый раз, когда я использую Symfony.иногда вам нужно выбрать массивы, в этом случае вы можете использовать гидратацию данных, например HYDRATE_ARRAY или HYDRATE_ARRAY_HIERARCHY, если у вас есть вложенный набор.

Что касается необработанных запросов, проверьте это: raw 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();

Этот запрос возвращает массивиз 5 ближайших городов к нашим координатам широта / долгота.Я думаю, это говорит само за себя.

...