Что быстрее?Итерация или DQL? - PullRequest
0 голосов
/ 02 августа 2011

Что из этого быстрее?

Учитывая, что я уже сделал следующее ...

$query = $em->createQuery("SELECT g FROM SSMURBS\Group g WHERE g.id = {$_POST['group_id']}");
$group = $query->getSingleResult();

Какая из следующих строк кода лучше?

(1)

$query = $em->createQuery("SELECT partial p.{id} FROM SSMURBS\Person p WHERE :groupId MEMBER OF p.groups");
$query->setParameter('groupId', $_POST['group_id']);
$member_ids_result = $query->getScalarResult();
$member_ids = $member_ids_result[0];

или ...

(2)

$group_member_ids = array();
foreach( $group->members as $member ){
    $group_member_ids[] = $member->id;
}

1 Ответ

1 голос
/ 02 августа 2011

Оба метода, кажется, делают две разные вещи.

  • Первый получает все и заполняет $ member_ids первым результатом.
  • Второй выполняет итерацию по каждому члену в группе

Лучший способ перебрать результаты - использовать метод запроса iterate(). См. Документы ->

$query = $em->createQuery("SELECT g FROM SSMURBS\Group g WHERE g.id = ?1");
$query->setParameter(1, $_POST['group_id']);

$group_member_ids = array();
$iterableResult = $query->iterate();

foreach ($iterableResult as $member) {
    $group_member_ids[] = $member->id;
}

Как я уже сказал в своем комментарии к вашему вопросу, проверьте ввод пользователя перед использованием в запросе.Просто чтобы быть в безопасности.

...