我正在尝试从代码中加载帖子,但到目前为止还没有找到适合自己的解决方案。
不确定问题是否与查询有关,或者是如何从twig文件中选择它。使用下面的存储库代码给我一个空数组。
如果问题是查询,您如何将其设置为从侧边栏用户输入加载标签的位置,然后加载正确的帖子?
存储库
/**
* @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;
}
答案 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! :)