首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2 -网站搜索功能

Symfony2 -网站搜索功能
EN

Stack Overflow用户
提问于 2014-06-23 08:21:22
回答 2查看 229关注 0票数 0

我有一个工作搜索功能,在我的web应用程序中的一个实体。

但我想将其扩展到我的站点上的多个实体(不同的标题),其中每个实体包含不同的帖子。

这些实体是不相关的,我想使用一个通用搜索同时查询所有实体,这可能吗?如果不是,我有什么选择?

搜索服务

代码语言:javascript
复制
public function indexAction(Request $request)
{
    $results = null;
    $query = $request->query->get('q');

    if (!empty($query)) {
        $em = $this->getDoctrine()->getEntityManager();

        $results = $em->createQueryBuilder()
            ->from('AcmeDemoBundle:Article', 'a')
            ->select('a')
            ->where('a.title LIKE :search')
            ->setParameter(':search', "%${query}%")
            ->getQuery()
            ->getResult();
    }

    return array(
        'query' => $query,
        'results' => $results,
    );
}

searchAction

代码语言:javascript
复制
public function searchAction()
{
    // Search code: calling from the service Search
    $query = $this->get('search');
    $posts = $query->search();

    return array(
        'query'        => $query,
        'posts'      => $posts['results'],
    );
}

search.html.twig

代码语言:javascript
复制
{% block body %}
{{ parent() }}

        <div id="main">

            <div class="article-wrapper">

                {% for post in posts %}
                    {% autoescape false %}
                    {{ include('AcmeDemoBundle:Partial:_post.html.twig', { post: post }) }}
                    {% endautoescape %}
                {% else %}
                    <p>No results found</p>
                {% endfor %}

            </div>

        </div><!-- end Main content -->

        {% block sidebar %}
            {% render controller('AcmeDemoBundle:Page:sidebar') %}
        {% endblock %}

        {% block footer %}
            {% render controller('AcmeDemoBundle:Page:footer') %}
        {% endblock %}
    </div>
</div>

{% endblock %}

_post.html.twig

代码语言:javascript
复制
<article id="" class="format-standard hentry has-thumbnail">

        <div class="entry-thumbnail">
            <img width="230" height="172" src="{{ asset(['images/', post.image]|join) }}" class="" alt=""/>
        </div>

        <header class="entry-header">
            <h1 class="entry-title"><a href="{{ path('acme_demo_page_show', { slug: post.slug }) }}" title="">{{ post.title }}</a></h1>

            <p class="by-line"> by <a class="author-link" href="" rel="author">{{ post.author }}</a> on {{ post.createdAt|date('l, F j, Y') }}</p>
        </header>
        <!-- .entry-header -->

        <div class="entry-content">
            {% autoescape false %}
            <p>{{ include(template_from_string(post.body|truncate(1000))) }}</p>
            {% endautoescape %}
        </div><!-- .entry-content -->
        <div class="clear"></div>

    </article>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-24 11:25:30

首先,请尝试创建您的普通SQL,因为我理解这应该是

代码语言:javascript
复制
"SELECT * FROM AcmeDemoBundle:Article a, AcmeDemoBundle:Post p WHERE a.title = :search or p:title = :search"

然后将其转换为查询生成器(不是测试它,而是应该工作)

代码语言:javascript
复制
 $results = $em->createQueryBuilder()
            ->from('AcmeDemoBundle:Article', 'a')
            ->from('AcmeDemoBundle:Post', 'p')
            ->select('a, p')
            ->orWhere('a.title LIKE :search')
            ->orWhere('p.title LIKE :search')
            ->setParameter(':search', "%${query}%")
            ->getQuery()
            ->getResult();
票数 0
EN

Stack Overflow用户

发布于 2014-06-23 09:15:39

我不知道它是否有用,但您可以执行原始SQL。

代码语言:javascript
复制
$em = $this->getDoctrine()->getManager();
$sql = " 
SELECT *
FROM db1 d1 
LEFT JOIN db2 d2 ON d1.id = d2.id
WHERE  ...
";
$stmt = $em->getConnection()->prepare($sql);
$stmt->bindParam(':state_id', $state_id);
$stmt->execute();
$db = $stmt->fetchAll();

如果它们与任何ID无关,我将执行两个查询并创建一个新的数组:$result1$result2,类似的情况。

代码语言:javascript
复制
$result_all = array();
foreach ($result1 as $v1) {
    foreach ($result2 as $v2) {
    //array_push or $result_all[] = $v2...
    }

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24361352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档