未定义的方法'findLikeFullnameArray'.方法名必须以findBy或findOneBy


Symfony2 Undefined method 'findLikeFullnameArray'. The method name must start with either findBy or findOneBy

我已经阅读了这个问题的各种解决方案,但似乎都不起作用。我很想知道这个问题的核心是什么。我将确切地列出我所做的事情,因为它相对简单,我不知道我错过了什么。

所以我创建了一个简单的数据库与表的人,我试图生成CRUD与引导,我得到工作良好。我的问题是,当我试图让jquery插件工作与自动完成。接下来我添加一个存储库来处理我的查询,那就是当我得到Symfony2未定义方法'findLikeFullnameArray'消息时。我正试图使用注释,所以如果我的过程中有什么问题,请让我知道。

下面是我的命令:创建包

  1. app/console生成:bundle——bundle-name=CompanyNameofBundle——format=annotation
  2. Bundle命名空间:Company/nameofBundle
  3. 是否生成整个目录结构:yes
  4. 确认生成:返回
  5. 确认自动更新内核:yes
  6. 确认自动更新路由:yes

创建实体

  1. app/console生成:bundle——bundle-name=CompanyNameofBundle——format=annotationBundle命名空间:Company/nameofBundle要生成整个目录结构吗?是确认代:退货吗确认自动更新您的内核:是确认自动更新路由:yes
  2. app/console原则:mapping:import——force CompanyNameofBundle xml
  3. app/console原则:generate:entities CompanyNameofBundle
  4. app/console生成:doctrine:crud -entity =CompanyNameofBundle:Entityname——format=annotation——with-write -no-interaction

然后创建SearchController:

namespace Company'NameofBundle'Controller;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Route;
use Sensio'Bundle'FrameworkExtraBundle'Configuration'Template;
use Company'NameofBundle'Form'JqueryType;
use Company'NameofBundle'Form'SearchType;
use Symfony'Component'HttpFoundation'Response;
use Symfony'Component'HttpFoundation'JsonResponse;
use Symfony'Component'HttpFoundation'Request;
use Company'NameofBundle'Entity'Person;

/**
 * Search controller.
 *
 * @Route("/search")
 */
class SearchController extends Controller
{
    /**
     * @Route("/", name="search")
     * @Template()
     */
    public function indexAction()
    {
        $form   = $this->createForm(new SearchType(), null, [
            'action' => '',
            'method' => 'POST'
        ]);
        return array(
            'form'   => $form->createView(),
        );
    }
    /**
     * @Route("/person_search", name="person_search")
     * @Template()
     *
     * @param Request $request
     *
     * @return array
     */
    public function searchPersonAction(Request $request)
    {
        $q = $request->get('term');
        $em = $this->getDoctrine()->getManager();
        $results = $em->getRepository('CompanyNameofBundle:Person')->findLikeFullname($q);
        return array('results' => $results);
    }
    /**
     * @Route("/person_get", name="person_get")
     *
     * @param $id
     *
     * @return Response
     */
    public function getPersonAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $book = $em->getRepository('CompanyNameofBundle:Person')->find($id);
        return new Response($book->getFullname());
    }
    /**
     * @Route("/jquery", name="jquery")
     * @Template()
     */
    public function jqueryAction()
    {
        $form   = $this->createForm(new JqueryType(), null, [
            'action' => '',
            'method' => 'POST'
        ]);
        return array(
            'form'   => $form->createView(),
        );
    }
    /**
     * @Route("/jquery_search/{phrase}", name="jquery_search")
     *
     * @param string $phrase
     *
     * @return JsonResponse
     */
    public function searchJqueryAction($phrase)
    {
        $em = $this->getDoctrine()->getManager();
        $results = $em->getRepository('CompanyNameofBundle:Person')->findLikeFullnameArray($phrase);
        return new JsonResponse($results);
    }
}

人的实体:

<?php
namespace Company'NameofBundle'Person;
use Doctrine'ORM'Mapping as ORM;
/**
 * Person
 * @ORM'Table()
 * @ORM'Entity(repositoryClass="Company'NameofBundle'Entity'Repository'PersonRepository")
 */
class Person
{
    /**
     * @var integer
     *
     * @ORM'Column(name="id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var string
     *
     * @ORM'Column(name="fullname", type="string", length=255)
     */
    private $fullname;
    /**
     * @var string
     *
     * @ORM'Column(name="email", type="string", length=255)
     */
    private $email;
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set fullname
     *
     * @param string $fullname
     * @return Person
     */
    public function setFullname($fullname)
    {
        $this->fullname = $fullname;
        return $this;
    }
    /**
     * Get fullname
     *
     * @return string
     */
    public function getFullname()
    {
        return $this->fullname;
    }
    /**
     * Set email
     *
     * @param string $email
     * @return Person
     */
    public function setEmail($email)
    {
        $this->email = $email;
        return $this;
    }
    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }
}

最后PersonRepository

<?php
namespace Company'NameofBundle'Entity'Repository;
use Doctrine'ORM'EntityRepository;
class PersonRepository extends EntityRepository
{
    public function findLikeFullnameArray($fullname)
    {
        return $this->createQueryBuilder('person_repository')
            ->where('person_repository.fullname LIKE :name')
            ->setParameter('name', '%' . $fullname . '%')
            ->getQuery()
            ->getArrayResult();
    }
}

以防万一这里是我的app/config/routing.yml

company_nameofbundle:
    resource: "@CompanyNameofBundle/Controller/"
    type:     annotation
    prefix:   /

提前感谢!

首先,您应该查看文档,以便拥有这样的存储库:

http://symfony.com/doc/current/book/doctrine.html

// src/AppBundle/Entity/Product.php
namespace AppBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
/**
 * @ORM'Entity(repositoryClass="AppBundle'Entity'ProductRepository")
 */
class Product
{
    //...
}

在第二次,你必须检查是否有xml格式,你已经把

<entity name="Acme'StoreBundle'Entity'Product" repository-class="Acme'StoreBundle'Entity'ProductRepository">

你不能在Symfony 2中混合annotation, xmlyml格式来塑造一个实体,删除所有不必要的文件。