2013-11-15 29 views
0

我在我的項目中以開頭,但我遇到了一個問題獲取相關實體。我有這樣的實體:從相關實體獲取值會導致錯誤

<?php 

namespace PI\ProyectoBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\Event\LifecycleEventArgs; 

/** 
* @ORM\Entity 
* @ORM\Table(name="proyectos") 
* @ORM\HasLifecycleCallbacks 
*/ 
class Proyectos { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=45, unique=true, nullable=false) 
    */ 
    protected $nombre; 

    /** 
    * @ORM\Column(type="boolean", nullable=true) 
    */ 
    protected $estado; 

    /** 
    * @ORM\Column(type="string", length=45, nullable=false) 
    */ 
    protected $pais; 

    /** 
    * @ORM\Id 
    * @ORM\ManyToOne(targetEntity="PI\ClienteBundle\Entity\Clientes", cascade={"all"}) 
    * @ORM\JoinColumn(name="cliente", referencedColumnName="id") 
    */ 
    protected $clientes; 

    /** 
    * @ORM\ManyToMany(targetEntity="PI\CentroBundle\Entity\Centros", inversedBy="proyectos", cascade={"persist"}) 
    * @ORM\JoinTable(name="proyectos_has_centros", 
    *  joinColumns={@ORM\JoinColumn(name="proyectos_id", referencedColumnName="id"), 
    *     @ORM\JoinColumn(name="proyectos_cliente", referencedColumnName="cliente")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="centros_id", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $centros; 

    /** 
    * ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"persist"}) 
    * ORM\JoinTable(name="proyectos_has_system_user", 
    *  joinColumns={@ORM\JoinColumn(name="proyectos_id", referencedColumnName="id"), 
    *     @ORM\JoinColumn(name="proyectos_cliente", referencedColumnName="cliente")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="system_user_id", referencedColumnName="id")} 
    *  ) 
    */ 
    protected $ingenieros; 

    public function __construct() { 
     $this->centros = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->ingenieros = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 

    public function getId() { 
     return $this->id; 
    } 

    public function setNombre($nombre) { 
     $this->nombre = $nombre; 
    } 

    public function getNombre() { 
     return $this->nombre; 
    } 

    public function setEstado($estado) { 
     $this->estado = $estado; 
    } 

    public function getEstado() { 
     return $this->estado; 
    } 

    public function setPais($pais) { 
     $this->pais = $pais; 
    } 

    public function getPais() { 
     return $this->pais; 
    } 

    public function setClientes(\PI\ClienteBundle\Entity\Clientes $clientes) { 
     $this->clientes = $clientes; 
    } 

    public function getClientes() { 
     return $this->clientes; 
    } 

    public function setCentros(\PI\CentroBundle\Entity\Centros $centros) { 
     $this->centros[] = $centros; 
    } 

    public function getCentros() { 
     return $this->centros; 
    } 

    public function setIngenieros(\BIT\UserBundle\Entity\User $ingenieros) { 
     $this->ingenieros[] = $ingenieros; 
    } 

    public function getIngenieros() { 
     return $this->ingenieros; 
    } 

    /** 
    * @ORM\PrePersist 
    */ 
    public function prePersist(LifecycleEventArgs $eventArgs) { 
     $em = $eventArgs->getEntityManager(); 
     $q = $em->createQuery('SELECT MAX(p.id) FROM PIProyectoBundle:Proyectos p'); 
     $id = $q->getSingleResult(\Doctrine\ORM\Query::HYDRATE_SINGLE_SCALAR); 
     $this->id = $id + 1; 
    } 

} 

這是我如何配置過濾器ProyectoAdmin.php類:

protected function configureDatagridFilters(DatagridMapper $filter) { 
    $filter 
      ->add('nombre', null, array('label' => 'Nombre')) 
      ->add('estado', null, array('label' => 'Estado')) 
      ->add('pais', null, array('label' => 'País')) 
      ->add('clientes', null, array('label' => 'Asignar Clientes')) 
      ->add('ingenieros', null, array(), null, array('expanded' => true, 'multiple' => true)) 
      ->add('centros', null, array('label' => 'Asignar Centros')); 
} 

但我得到這個錯誤:

Notice: Undefined index: ingenieros in /var/www/html/pingenieros/vendor/sonata-project/doctrine-orm-admin-bundle/Sonata/DoctrineORMAdminBundle/Guesser/FilterTypeGuesser.php line 64

我做錯了什麼?

回答

0

沒關係是我不好,看到這樣的代碼:

/** 
* ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"persist"}) 
* ORM\JoinTable(name="proyectos_has_system_user", 
*  joinColumns={@ORM\JoinColumn(name="proyectos_id", referencedColumnName="id"), 
*     @ORM\JoinColumn(name="proyectos_cliente", referencedColumnName="cliente")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="system_user_id", referencedColumnName="id")} 
*  ) 
*/ 
protected $ingenieros; 

應該是:

/** 
* @ORM\ManyToMany(targetEntity="Application\Sonata\UserBundle\Entity\User", cascade={"persist"}) 
* @ORM\JoinTable(name="proyectos_has_system_user", 
*  joinColumns={@ORM\JoinColumn(name="proyectos_id", referencedColumnName="id"), 
*     @ORM\JoinColumn(name="proyectos_cliente", referencedColumnName="cliente")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="system_user_id", referencedColumnName="id")} 
*  ) 
*/ 
protected $ingenieros; 

通知的@ORM定義,那是無論如何謝謝

0

嘗試

->add('ingenieros', 'entity', array(
        'class' => 'AcmeMyBundle:Entity', //your ingenieros entity 
        'property' => 'name', // any class property 
        'multiple' => true, 
           'expanded' => true))