Доктрина 2 функция findby, получить ключи и значения - PullRequest
4 голосов
/ 18 сентября 2011

Могу ли я получить ключи и значения динамически.

в php, вы бы: foreach ($array as $key => $value)

, но вы можете сделать это для:

$this->_em->getRepository('Members')->findBy(array('id' =>5));

любойспособ получить ключи от этого с их значениями ..?

Я могу сделать это, превратив его в массив и извлечь его, но я не получу никаких результатов ассоциации внутри массива ..

я хочу сделать это так, как я хочу иметь возможность извлекать все свойства и значения этого объекта, а также извлекать все другие объекты в нем ..

1 Ответ

2 голосов
/ 18 сентября 2011

У меня была та же проблема, что и у вас сейчас, и после некоторого исследования я просто нашел решение, которое может вас заинтересовать. Вам нужен ассоциативный массив ключей / значений, а не метод object.findBy (), возвращающий только сущность OBJECT.so вам нужно будет использовать DQL (язык запросов доктрины).

//create a QueryBuilder instance
$qb = $this->_em->createQueryBuilder();
$qb->add('select', 'a')
//enter the table you want to query
->add('from', 'Members a')
->add('where', 'a.id = :id')
//order by username if you like
//->add('orderBy', 'a.username ASC')
//find a row with id=5
->setParameter('id', '5');
query = $qb->getQuery();
//if you dont put 3 or Query::HYDRATE_ARRAY inside getResult() an object is returned and if you put 3 an array is returned
$accounts = $query->getResult(3);

из документации доктрины:

13.7.4. Режимы гидратации

Каждый из режимов гидратации делает предположения о том, как результат вернулся к земле пользователя. Вы должны знать обо всех деталях, чтобы сделать лучшее использование различных форматов результата:

Константы для различных режимов гидратации: Запрос :: HYDRATE_OBJECT Запрос :: HYDRATE_ARRAY Запрос :: HYDRATE_SCALAR Запрос :: HYDRATE_SINGLE_SCALAR

Чтобы узнать больше о 'The Query Builder', пожалуйста, обратитесь к документации doctrine2

Обновление: Чтобы получить связанные сущности, вам нужно определить выборочные объединения. Вот пример, приведенный в документации доктрины :

$dql = "SELECT b, e, r, p FROM Bug b JOIN b.engineer e ".
   "JOIN b.reporter r JOIN b.products p ORDER BY b.created DESC";
$query = $entityManager->createQuery($dql);
$bugs = $query->getArrayResult();

foreach ($bugs AS $bug) {
  echo $bug['description'] . " - " . $bug['created']->format('d.m.Y')."\n";
  echo "    Reported by: ".$bug['reporter']['name']."\n";
  echo "    Assigned to: ".$bug['engineer']['name']."\n";
foreach($bug['products'] AS $product) {
  echo "    Platform: ".$product['name']."\n";}
  echo "\n";}

Приведенный выше код будет извлекать ваши сущности в виде массивов, и вы можете делать все, что захотите, с помощью $ keys и $ values. Надеюсь, это поможет ...

...