【问题标题】:Object not returning all elements with doctrine对象不返回带有教义的所有元素
【发布时间】:2019-12-06 16:37:26
【问题描述】:

我正在转储这个循环变量$document_id

foreach($onboarding_data as $user_id => $document_id) {
   var_dump($document_id);
}

并返回一个元素数组,就像它应该做的那样:

array(4) { [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "1" [4]=> string(1) "1" }

但是当我使用 $document_id 创建对象查询时

foreach($onboarding_data as $user_id => $document_id) {
    $documents = $this->em->getRepository('Entities\Documents')->findById($document_id);
    var_dump($documents);
}

我的对象只包含数组第一个键的结果

array(1) { [0]=> object(Entities\Documents)#481 (3) { ["id":protected]=> int(1) ["documents":protected]=> string(8) "Form I-9" ["url":protected]=> string(7) "I-9.pdf" } }

其他键 [2]、[3]、[4] 会发生什么?为什么它们没有显示在我创建的对象中?

【问题讨论】:

  • 您传入的数组中的所有值都是相同的——1。即,您基本上是在说,“给我文件 1、1、1 和 1。”
  • @AlexHowansky 哦,我明白了!我将如何查找数组的键而不是值?
  • array_keys($document_id)
  • @AlexHowansky 抱歉,我遇到了语法问题。会是 $documents = $this->em->getRepository('Entities\Documents')->findBy(array_keys($document_id)); ?谢谢

标签: php foreach doctrine-orm doctrine doctrine-query


【解决方案1】:

我可能错了,但是这个

array(4) { [1]=> string(1) "1" [2]=> string(1) "1" [3]=> string(1) "1" [4]=> string(1) "1" }

在打印数组元素时看起来像整个数组的输出

选中此项以查看数据输出与您拥有的数据的差异

$a = array();
array_push($a,"test 1");
array_push($a,"test 2");
var_dump($a);
echo("<br/>");
foreach($a as $user_id => $document_id) {
   var_dump($document_id);
}

输出是

array(2) { [0]=> string(6) "test 1" [1]=> string(6) "test 2" }
string(6) "test 1" string(6) "test 2"

我怀疑您的数组只有一个元素(并且该元素是您正在打印的 4 个元素的数组)。这就是为什么你只有一个输出而不是 4 个。

所以我认为这是您的主要问题,但 @Alex Howansky 在评论中所说的似乎是真的,即使这不是您的主要问题。如果您正确传递数据,您将打印 4 次相同的数据。

【讨论】:

  • 第一部分打印正确,key不同,value相同。我想创建我的对象,它将为我提供 Id 与传递的数组的键匹配的文档
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
  • 2019-02-26
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
相关资源
最近更新 更多