Symfony2-需要帮助设置用于查找标签的条令查询



我一直在四处寻找,但仍然找不到如何设置查询以查找用户从侧边栏中选择的特定"标签"的示例,而侧边栏又会显示所有带有该标签的帖子。

我了解如何查找所有标签,但不了解如何查找用户选择的特定标签。

博客存储库

public function getTags($tags)
{
    $qb = $this->createQueryBuilder('b');
    $qb->select('b')
        ->join('b.tags', 'tag')
        ->where('b.tags LIKE ?', '%'.$tags.'%');
    return $qb->getQuery()->getResult();
}

博客实体

/**
 * @var string
 *
 * @ORMColumn(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;
}

第一个解决方案:您应该使用条令查询。

PostRepository.php

public function findByTagName($tagName)
{
    $qb = $this->createQueryBuilder('post');
    $qb->select('post')
        ->join('post.tags', 'tag')
        ->where('tag.name LIKE ?', '%'.$tagName.'%');
    return $qb->getQuery()->getResult();
}

第二个解决方案:使用多对多关系,直接从条令中获得

实体/Tag.php

/**
 * @ORMManyToMany(targetEntity="YourAppYourBundleEntityPost", inversedBy="tags")
 * @ORMJoinColumn(name="posts_tags")
 */
private $posts;

实体/Post.php

/**
 * @ORMManyToMany(targetEntity="YourAppYourBundleEntityTag", mappedBy="posts")
 */
private $tags;

所以你可以做$tag->getPosts();来获得所有相关的帖子

第三个解决方案:真的很难看,但教程的设计并不是为了改进。。。获取所有博客文章并解析每个字符串,以确定您的标签是否在中

public function getBlogWithTag($tagRequested)
{
    $blogs = $this->createQueryBuilder('b')
                 ->getQuery()
                 ->getResult();
    $blogsWithTag = array();
    $tags = array();
    foreach ($blogs as $blog)
    {
        $tags = explode(",", $blog->getTags());
        foreach ($tags as &$tag)
        {
            $tag = trim($tag);
        }
        if(in_array($tagRequested, $tags)) {
            array_push($blogsWithTag, $blog);
        }
    }
    return $blogsWithTag;
}

我相信这对你有用。

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

相关内容

  • 没有找到相关文章

最新更新