У меня есть 2 сущности, документ и поле, внутри сущностей у меня есть отношения OneToMany и ManyToOne.
Меня беспокоит причина, когда я пытаюсь получить значения полей из документа в контроллере. Я получаю ошибку, потому что не могу использовать метод для строки.
возобновить:
часть 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()
возвращает массив, поэтому, когда вы не пытаетесь рассматривать его как массив, он может вести себя по-другому. В этом случае он пытался быть строкой.
PS — тебе не нужно $i
счетчик в вашем коде.
foreach($document->getFields() as $field){
var_dump($field);
$documents[] = $field->getValue();
}
Других решений пока нет …