Доктрина 2 функция findby, получить ключи и значения

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

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

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

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

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

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

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

1 ответ

Решение

У меня была та же проблема, что и у вас сейчас, и после некоторого исследования я просто нашел решение, которое может вас заинтересовать. Вам нужен ассоциативный массив ключей / значений, а не метод 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. Режимы гидратации

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

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

Чтобы узнать больше о "построителе запросов", пожалуйста, обратитесь к документации 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. Надеюсь это поможет...

Другие вопросы по тегам