Доктрина 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. Надеюсь это поможет...