使用Doctrine和Symfony2进行数据库搜索

时间:2012-07-17 18:14:45

标签: symfony doctrine

所以我目前正在尝试使用Symfony2和Doctrine进行简单的搜索。类似于此的内容:http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/searching.html

我目前有以下YAML文件设置来生成我的实体。它正确地生成我的class Style实体。

...\Style:
    type: entity
    table: styles
    id:
        id:
            type: integer
            generator:
                strategy: IDENTITY
    actAs:
        Searchable:
            fields: [title]
            batchUpdates: true
    fields:
        title:
            type: string
            length: 150
            unique: true

在我的控制器中,我正在尝试根据字符串在该表上运行搜索。

public function searchAction($pattern) 
{
    $repository = $this->getDoctrine()->getRepository('..:Style');
    $search = $repository->search($pattern);

    return $this->outputize($search);
}

但是,当我尝试执行代码时,我得到以下异常。

Undefined method 'search'. The method name must start with either findBy or findOneBy!

我是否正确地生成了我的实体,或者我有什么东西显然不见了?

在旁注中,当我在生成后查看我的Entity/Style.php时,没有明确的方法->search(),这个函数应该由Symfony在这里生成吗?

2 个答案:

答案 0 :(得分:6)

search()不是Symfony2中支持的功能。您正在查看Symfony 1.x文档,Symfony2与Symfony 1.x完全不同,所以为了参考,您应该始终使用the doc

有几种方法可以在Symfony2中获取实体。以下是一些例子:

  1. 查找

    $user = $this->getDoctrine()
        ->getRepository('UserBundle:User')
        ->find($user_id)
    ;
    
  2. DQL:

    $query = $em->createQuery(
        'SELECT b FROM YourBundle:Bid b WHERE b.property_id = :property_id ORDER BY b.amount DESC'
    )->setParameter('property_id', $property_id);
    try {
        $bids = $query->getResult();
    } catch (\Doctrine\Orm\NoResultException $e) {
        //Handle No Result Exception here
    }
    
  3. 请在此处参阅Symfony2的Doctrine指南:http://symfony.com/doc/current/book/doctrine.html

答案 1 :(得分:2)

你好,你可以在symfony 3中做到这一点

@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class,B.class})
public class ATest(){
    public void testMethodA(){
       PowerMockito.whenNew(B.class).withAnyArguments().thenReturn(BMock);
       A a = new A();
       a.A();
    }
 }