arrayCollection 学说用字符串代替对象

arrayCollection doctrine give a string in place of object

我有 2 个实体,文档和字段,在实体内部我有一些关系 OneToMany 和 ManyToOne.. 当我尝试从控制器中的文档中获取字段值时,我感到很困扰。我收到错误消息,因为我无法在字符串上使用 methode。

恢复:

document.php的一部分:

/**
 * @var ArrayCollection $fields
 *
 * @ORM\OneToMany(targetEntity="AUTOFUSION\AutofusionBundle\Entity\Field", mappedBy="document", cascade={"persist", "remove", "merge"})
 */
private $fields;

/**
 * Constructor
 */
public function __construct()
{
    $this->fields = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add field
 *
 * @param \AUTOFUSION\Autofusionbundle\Entity\Field $field
 *
 * @return Document
 */
public function addField(\AUTOFUSION\AutofusionBundle\Entity\Field $field)
{
    $this->fields[] = $field;

    return $this;
}

/**
 * Remove field
 *
 * @param \AUTOFUSION\AutofusionBundle\Entity\Field $field
 */
public function removeField(\AUTOFUSION\AutofusionBundle\Entity\Field $field)
{
    $this->fields->removeElement($field);
}

/**
 * Get fields
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getFields()
{
    return $this->fields;
} 

DefaultController.php的一部分:

 public function indexAction{
    $regroupings = $em->getRepository('AUTOFUSIONAutofusionBundle:Regrouping')->FindRegrouping();
   }
  public function DocumentsArray($regroupings){
    $i=0;

    foreach($regroupings as $regrouping){

                foreach($regrouping->getDocuments() as $document){

                    foreach($document->getFields() as $fields){

                        var_dump($document->getFields());
                    die();


                            //$documents[$i] = $document->getFields()->getValue();

                    }
                    $i++;
                }
        return $documents;
    }

}

存储库的一部分:

 public function FindRegrouping(){

        return $this->_em->createQueryBuilder()
                ->select('p','gdt','dt','d','f')
                ->from('AUTOFUSION\AutofusionBundle\Entity\Regrouping', 'p')
                ->leftJoin('p.groupDocType', 'gdt')
                ->leftJoin('p.documents','d')
                ->leftJoin('d.docType', 'dt')
                ->leftJoin('d.fields', 'f')
                //->where('v.cp=:cp')
                //->setParameter('cp', $cp);
                ->getQuery()
                ->getResult();
    }

这里是输出的一部分var_dump($document->getFields());:

protected 'collection' => 
    object(Doctrine\Common\Collections\ArrayCollection)[590]
      private 'elements' => 
        array (size=4)
          0 => string 'NOM_CLIENT' (length=10)
          1 => 
            object(AUTOFUSION\AutofusionBundle\Entity\Field)[599]
              ...
          2 => 
            object(AUTOFUSION\AutofusionBundle\Entity\Field)[600]
              ...
          3 => 
            object(AUTOFUSION\AutofusionBundle\Entity\Field)[601]
              ...

所以,我不明白为什么arraycollection的第一项是字符串?!

看看我的代码。当您迭代 getFields() 时,无需在循环内再次调用它。 getFields() returns 数组,因此当您不尝试将其视为数组时,它的行为可能会有所不同。在这种情况下,它试图成为一个字符串。

PS - 您的代码中不需要 $i 计数器。

foreach($document->getFields() as $field){
    var_dump($field);
    $documents[] = $field->getValue();
}