9

この記事を書いているのは、doctrine クエリで配列値を渡すのにほとんど問題がないからです。

クエリ全体は次のとおりです。

$data = $request->request->all();
$dql   = "SELECT a FROM PfBlogBundle:Article a WHERE a.title LIKE '{$data['search']}' ORDER by a.id DESC";

print_r($data) の場合、値を取得するので、どこかにあります。クエリで渡されない理由がわかりません.. LIKE '{$data['search']}' が機能することを期待していましたが、機能しません。

4

1 に答える 1

22

あなたのスニペットからわかることから、あなたは次のようなものを探しています:

$entityManager->getRepository('PfBlogBundle:Article')
              ->findBy(
                   array(
                      'key' => 'value'
                   )
               );

key はプロパティ/フィールドで、value は検索する値です。Symfony のマニュアルページを確認してください。あなたが求めているのは、データベースからオブジェクトをフェッチすることです。where 句で
a を使用するには、使用方法に関するこの SO の質問を参照してください。これでクエリを取得します:likesetParameter

$repo = $entityManager->getRepository('PfBlogBundle:Article');
$query = $repo->createQueryBuilder('a')
               ->where('a.title LIKE :title')
               ->setParameter('title', '%'.$data['search'].'%')
               ->getQuery();

もちろん、必要に応じてワイルドカードを追加してください。$data['search']値を 2 つのワイルドカードで囲みました%が、これは遅いですが、繰り返しになりますが、実際に何をしているのかわかりません。大文字と小文字を区別しない の性質だけを求めているのかもしれません。そのLIKE場合、%は一緒に省略できます...

以前の質問に基づいて (ところで: たまに回答を受け入れることを検討してください):

public function searchAction(Request $request)
{
    $data = $request->get->all();
    $repo = $this->getDoctrine()
                  ->getRepository('PfBlogBundle:Article');
    $query = $repo->createQueryBuilder('a')
                   ->where('a.title LIKE :title')
                   ->setParameter('title', '%'.$data['search'].'%')
                   ->getQuery();
    $paginator  = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
        $query->getResults(),//get the results here
        $this->requrest->get('page',1),
        4
    );
    return $this->render('PfBlogBundle:Default:blog.html.twig', array('pagination'=>$pagination));
}

しかし、これは大雑把な修正であり、Google doctrine-symfony paginationです。この問題については、多くの詳細なブログ投稿があります。

于 2013-09-05T10:47:19.423 に答える