doctrine 2 findby函数,获取键和值

时间:2011-09-18 10:54:53

标签: doctrine doctrine-orm findby

我可以动态获取密钥和值吗。

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

但你可以这样做:

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

用这些值来获取密钥的任何方法..?

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

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

1 个答案:

答案 0 :(得分: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。水合模式

     

每种水合模式都会假设结果如何   返回用户土地。你应该知道要做的所有细节   最好地使用不同的结果格式:

     

不同水合模式的常数是:   查询:: HYDRATE_OBJECT   查询:: HYDRATE_ARRAY   查询:: HYDRATE_SCALAR   查询:: HYDRATE_SINGLE_SCALAR

要详细了解“查询构建器”,请参阅doctrine2 documentation

<强>更新 要获取关联的实体,您需要定义提取连接。这是doctrine documentation中提供的示例:

$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执行任何操作。 希望这会有所帮助...