4

そのため、現在、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 によって生成されるはずですか?

4

2 に答える 2

6

search()は Symfony2 でサポートされている関数ではありません。あなたは Symfony 1.x のドキュメントを見ています

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
    }
    

ここで Symfony2 の Doctrine ガイドを参照してください: http://symfony.com/doc/current/book/doctrine.html

于 2012-07-18T06:55:55.970 に答える
2

こんにちは、あなたはsymfony 3でそれを行うことができます

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
                'SELECT p
                FROM AppBundle:Hotel p
                WHERE p.address like :location
                ORDER BY p.address ASC'
                )->setParameter('location','%'.$request->get('location').'%' );
$hotel = $query->getResult();
于 2016-07-05T15:57:06.310 に答える