1

ユーザーがテキストボックスに入力したキーワードをデータベースで検索するsearchControllerを作成したいと思います。私はこの記事これと他の多くを見てきました。

これは私がこれまでに持っているものです:

public function searchAction(Request $request) {
        if ($request->getMEthod() == 'GET') {
            $title = $request->get('Search_term');
            //echo "<div class=\"searchText\">Search Results</div><hr/>";
            $em = $this->getDoctrine()->getManager();
            $Search_terms = explode(' ', $title); //splits search terms at spaces
            $query = "SELECT * FROM Entity/Adverts WHERE ";

            foreach ($Search_terms as $each) {
                // echo $each."<br/>";
                $i = 0;
                $i++;
                if ($i == 1)
                    $query .= "Adv_title LIKE '%$each%' ";
                else
                    $query .= "OR Adv_title LIKE '%$each%' ";
            }
            $query = $em->createQuery($query);
            $numRow = $query->count();
            if ($numRow > 0) {
                while ($query->fetch()) {
                    $repository = $em->getRepository('YCRYcrBundle:Adverts')->findBy(array(
                        'advTitle' => $title
                    ));

                    /*    echo "<h2><a href='#'> $title</a> </h2>";
                      echo "$desc <br /> <br />";
                      echo"<a href='/201308/View/YCR/index.php' class='link-button right'><span>Apply</span></a>"; */
                }
            }
            /* else
              echo "none found for \"<b>$SearchTerm </b>\"</br>Check spelling"; */
        }
        return $this->render('YCRYcrBundle:Search:search.html.twig', array('title' => $title->getAdvTitle()));
}

このコードを機能させるために何が欠けているのでしょうか? また、何が間違っているのでしょうか?

編集:

わかりづらくてすみません。次のエラーが表示されます。

FatalErrorException: Error: Call to undefined method Doctrine\ORM\Query::count() in C:\wamp\www\201308\src\YCR\YcrBundle\Controller\SearchController.php 行 28 で何が問題なのかわかりません。 Symfony とドクトリンは初めてです。

これは私のsearch.html.twigにあるものです:

{% extends "YCRYcrBundle::layout.html.twig" %}

{% block content %}

<!DOCTYPE html>
<html lang="en">
    <head>
         <meta charset="utf-8" />
        <title>YCR Job Search</title>

        <link href="stylesheets/style.css" rel="stylesheet" type="text/css" />
  <link href="stylesheets/colour.css" rel="stylesheet" type="text/css" />
        </head>
        <body onload="b = setInterval('clear()', 0);">


            <div class="topDiv">
                <div style="float: left;">
                    <img src="/201308/View/images/ycr.jpg" alt="ycr"></div>
                <br/>

                <!--<H2>Search for a Job</H2>--> 
                <div class="searchform">
    <form id="formsearch" name="p" method="get" action="index.php">
          <span>

          <input name="Search_term" class="editbox_search" id="editbox_search"          maxlength="80" value="<?php $this; ?>" type="text" />
          </span>
              <input type="image" name="button_search" src="images/search.gif"     class="button_search" alt="" />
        </form>
                <br/>          
                <div id="search_results">

                </div>
            </div>

            <!-- </div>-->

            <script type="text/javascript" src="http://code.jquery.com/jquery-    1.7.2.min.js"></script><!--javascript jquery library-->
            <script type="text/javascript" src="../View/scripts/Script.js"></script>         


{% endblock %}

ユーザーがプログラマーなどで検索すると、次のように表示されます。

-Programmer

-a summary of the description of what a programmer entails

-a button/link that reads: read more, that takes me to a page with full description
4

2 に答える 2

2

あなたはかなり的外れです。クエリにはカウント関数がありません。これはクエリビルダー関数です。生の SQL を書くこともできますが、querybuilder を学習したほうがよいでしょう: http://docs.doctrine-project.org/en/latest/reference/query-builder.html。doctrine はエンティティのリストを提供するように設計されており、これを小枝に渡して操作を行うことを忘れないでください。

また、あなたの小枝はあまり役に立ちません。私が含めた非常に粗雑な小枝の使用法の基本を参照してください。{{entity.method}}またはを使用{{entity.field}}して、各エンティティのさまざまな表示プロパティを取得します。小枝の foreach を使用して、それらすべてをループします。あなたのコンテキストで私の例を見てから、小枝のドキュメントを読んでギャップを埋めてください。 http://twig.sensiolabs.org/documentation

コントローラー

public function searchAction(Request $request) {
    if ($request->getMethod() == 'GET') {
        $title = $request->get('Search_term');
        $em = $this->getDoctrine()->getManager();
        $qb = $em->getRepository('YCRYcrBundle:Adverts')
                  ->createQueryBuilder('a');
        $searches= explode(' ', $title);

        foreach ($searches as $sk => $sv) {
            $cqb[]=$qb->expr()->like("CONCAT($sv, '')", "'%$sv%'");
        }

        $qb->andWhere(call_user_func_array(array($qb->expr(),"orx"),$cqb));

        $adverts = $qb->getResult();
    }
    return $this->render('YCRYcrBundle:Search:search.html.twig'
                        , array('adverts' => $adverts));
}

そして小枝ファイル

{# Your other stuff #}
{% for advert in adverts %}
    {{advert.getId}}
    {# call the various method and fields for your display#}
{% endfor %}
于 2013-04-30T01:54:56.367 に答える
0

( execute を使用して)クエリを実行する必要があります。そうしないと、配列を取得できません。DQL文字列連結の代わりにクエリビルダーを使用する必要があります。基本的な教義の使用法に関する教義のドキュメントを読んでください。エンティティの名前空間も間違っているようです。

私はあなたを引用します:

  $query = $em->createQuery($query);
            $numRow = $query->count();

少なくとも :

  $query = $em->createQuery($query);
            $numRow = count($query->execute())

編集 : 配列または ArrayCollection を取得するかどうかわからない場合は、カウント機能が ArrayCollection で機能するかどうかを確認してください。

于 2013-04-24T19:11:15.220 に答える