Symfony2 - 无法设置从侧栏加载用户选择的查询

时间:2014-04-21 00:52:24

标签: symfony doctrine-orm tags twig tag-cloud

我正在尝试从代码中加载帖子,但到目前为止还没有找到适合自己的解决方案。

不确定问题是否与查询有关,或者是如何从twig文件中选择它。使用下面的存储库代码给我一个空数组。

如果问题是查询,您如何将其设置为从侧边栏用户输入加载标签的位置,然后加载正确的帖子?

enter image description here

存储库

/**
 * @Route("/tag/{tag}", name="AcmeDemoBundle_tag")
 * @Template("AcmeDemoBundle:Page:tag.html.twig")
 */
public function getPostsByTags($tag)
    {
        $query = $this->createQueryBuilder('b')
            ->where('b.tags = :tag')
            ->setParameter('tag', $tag);

        return $query->getQuery()->getResult();
    }

twig文件通过控制器中的标签权重加载标签,如下所示:

侧边栏树枝

<p class="tags">
        {% for tag, weight in tags %}
        <span class="weight-{{ weight }}"><a href="{{ path('AcmeDemoBundle_tag', { 'tag': tag }) }}">{{ tag }}</a></span>
        {% else %}
    <p>There are no tags</p>
    {% endfor %}
    </p>

控制器

/**
 * @Template("AcmeDemoBundle:Page:sidebar.html.twig")
 */
public function sidebarAction()
    {
        $em = $this->getDoctrine()->getManager();

        $tags = $em->getRepository('AcmeDemoBundle:Blog')
            ->getTags();

        $tagWeights = $em->getRepository('AcmeDemoBundle:Blog')
            ->getTagWeights($tags);

        return array(
            'tags' => $tagWeights,
        );
    }

/**
 * @Route("/tag/{tag}", name="AcmeDemoFitnessBundle_tag")
 * @Template("AcmeDemoFitnessBundle:Page:tag.html.twig")
 */
public function tagAction($tag = null)
{
    $em = $this->getDoctrine()->getManager();

    $tags = $em->getRepository('AcmeDemoBundle:Blog')
        ->getPostsByTags($tag);

    return array(
        'tags' => $tag,
    );
}

从侧边栏上选择标签不会产生任何结果,(一个空数组)我不确定这是一个树枝问题还是如何设置学说查询。

请帮忙。

实体

/**
 * @var string
 *
 * @ORM\Column(name="tags", type="text")
 */
private $tags;

/**
 * Set tags
 *
 * @param string $tags
 * @return Blog
 */
public function setTags($tags)
{
    $this->tags = $tags;

    return $this;
}

/**
 * Get tags
 *
 * @return string
 */
public function getTags()
{
    return $this->tags;
}

1 个答案:

答案 0 :(得分:1)

嗯,你的标签字段的内容如何存储在数据库中?

无论如何,您似乎将标记存储为数据库中的字符串。这意味着您的查询看起来应该更像这样:

public function getPostsByTags($tag)
{
    $query = $this->createQueryBuilder('b')
        ->where('b.tags like :tag')
        ->setParameter('tag', '%'.$tag.'%');

    return $query->getQuery()->getResult();
}

如果您不想将标记存储为字符串,而是将其作为与其他实体的关系存储,则应该创建关联。

有关详细信息,请参阅The doctrine documentation! :)