2014-04-20 56 views
3

我一直在尋找範圍廣泛,仍然無法找到如何設置查詢以查找特定「標籤」的示例用戶從邊欄中選擇,邊欄會依次顯示帶有該標籤的所有帖子。Symfony2 - 需要幫助建立查找標籤的原則查詢

我明白如何找到所有的標籤,但不是找到用戶選擇的具體。

blogrepository

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 
* 
* @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

我相信這會適合你。

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

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

1解決方法:你應該用一種學說查詢。

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

/** 
* @ORM\ManyToMany(targetEntity="YourApp\YourBundle\Entity\Post", inversedBy="tags") 
* @ORM\JoinColumn(name="posts_tags") 
*/ 
private $posts; 

實體/ Post.php

/** 
* @ORM\ManyToMany(targetEntity="YourApp\YourBundle\Entity\Tag", mappedBy="posts") 
*/ 
private $tags; 

所以,你可以做$tag->getPosts();讓所有相關的帖子

3解決方法:真難看,但本教程的目的不是要加以改進...... 獲取所有的博客文章,並分析每個字符串找到如果您的標籤在。

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; 
} 
+0

我得到以下錯誤:'[語義錯誤] 0行,列78附近的 '標籤WHERE blog.tags':錯誤:類的Acme \ DemoBundle \實體\博客沒有協會命名tags' – Kincsem

+0

使用的如下所示:'public function getPostsByTags($ tags) { $ qb = $ this-> createQueryBuilder('b'); $ qb-> select('b') - > join('b.tags','tag') - > where('b.tags LIKE?','%'。$ tags。'%') ; return $ qb-> getQuery() - > getResult(); }' – Kincsem

+0

用我正在使用的查詢產生錯誤的查詢更新了原始帖子。 – Kincsem