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();
}
我有 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();
}