0

私は単純なエンティティでデータグリッドフィルターを使用しようとしています:

// MyBundle/Entity/Application.php

/**
 *
 * @ORM\Entity
 * @ORM\Table(name="application")
 */
class Application extends BaseEntity
{
    /**
     * @var integer $_id
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     */
    protected $_id;

    /**
     * @var string $_name
     * 
     * @ORM\Column(name="name", type="string", length=1000)
     */
    protected $_name;

    public function __toString()
    {
        if ((string) $this->_id === '') {
            return "N/A";
        }
        return $this->_name;
    }

    /**
     * Set _id
     *
     * @param integer $id
     */
    public function setId($id)
    {
        $this->_id = $id;
    }

    /**
     * Get _id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->_id;
    }

    /**
     * Set _name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->_name = $name;
    }

    /**
     * Get _name
     *
     * @return string 
     */
    public function getName()
    {
        return $this->_name;
    }
}

// MyBundle/Admin/ApplicationAdmin.php

class ApplicationAdmin extends Admin
{
    /**
     * @param string $code
     * @param string $class
     * @param string $baseControllerName
     */
    public function __construct($code, $class, $baseControllerName)
    {
        parent::__construct($code, $class, $baseControllerName);
        $this->setMaxPerPage(25);
    }

    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('id', 'integer')
            ->add('name', 'text')
        ;
    }

    /**
     * {@inheritdoc}
     */
    protected function configureDatagridFilters(DatagridMapper $datagridMapper)
    {
        $datagridMapper
            ->add('name');
        ;
    }

    protected function configureListFields(ListMapper $listMapper)
    {
        $listMapper
            ->addIdentifier('id', null, array('label' => 'ID'))
            ->addIdentifier('name', null, array('label' => 'Name'))
        ;
    }
}

しかし、アプリケーションのリストを取得しようとすると、次のようになります。

Notice: Undefined index: name in /path-to-symfony-project/vendor/bundles/Sonata/DoctrineORMAdminBundle/Guesser/FilterTypeGuesser.php line 65

configureDatagridFilters関数コードを次のように変更した場合:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('name', 'doctrine_orm_string');
    ;
}

要求されたフィルターを含むアプリケーション リストを正常に取得しましたが、フィルター フォームをいくつかのデータ (つまり、名前に aaa が含まれている) で送信しようとすると、別のエラーが発生します。

[Semantical Error] line 0, col 87 near 'name LIKE :n': Error: Class MyBundle\Entity\Application has no field or association named name

configureDatagridFilters関数コードを次のように変更した場合:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('_name');
        //or
        //->add('_name', 'doctrine_orm_string');
    ;
}

要求されたフィルターを含むアプリケーション リストも正常に取得できますが、フィルター フォームをいくつかのデータ (つまり、名前に aaa が含まれる) で送信しようとすると、3 番目のエラーが発生します。

Invalid parameter format, : given, but :<name> or ?<num> expected.
500 Internal Server Error - QueryException

アイデアがありません。助けてください。

4

1 に答える 1