4

我可以动态获取键和值吗?

在 php 中,你会:foreach ($array as $key => $value)

但你可以这样做:

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

有什么方法可以从中获取密钥及其值..?

我可以通过将它变成一个数组并提取它来做到这一点,但我不会在数组内得到任何关联结果..

我想这样做,因为我希望能够提取该对象的所有属性和值,并提取其中的所有其他对象。

4

1 回答 1

2

我和你现在有同样的问题,经过一些研究,我刚刚找到了一个你可能感兴趣的解决方案。你需要的是键/值的关联数组,而不是 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. 水合模式

每种 Hydration Modes 都会对结果如何返回到用户土地进行假设。您应该了解所有细节以充分利用不同的结果格式:

不同水合模式的常量是: Query::HYDRATE_OBJECT Query::HYDRATE_ARRAY Query::HYDRATE_SCALAR Query::HYDRATE_SINGLE_SCALAR

要了解有关“查询生成器”的更多信息,请参阅教义2 文档

更新: 要获取关联实体,您需要定义获取连接。以下是教义文档中提供的示例:

$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 做任何您想做的事情。希望这可以帮助...

于 2011-09-18T19:15:04.423 回答