2015-07-19 93 views
1

我有两个实体邮政和标签这个实体有关系ManyToMany,许多职位有很多标签和许多标签有很多职位,并有实体类别我很多职位的一个类别,我需要创建行动查找职位类别和发现后的标签如何查找实体ManyToMany

class Tag 
{ 
/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

/** 
* @ORM\Column(type="string", length=100) 
*/ 
protected $hashTag; 

/** 
* @Gedmo\Slug(fields={"hashTag"}) 
* @ORM\Column(type="string", length=12) 
*/ 
protected $hashSlug; 

/** 
* @ORM\ManyToMany(targetEntity="Post", inversedBy="tag") 
* @ORM\JoinColumn(name="post_id", referencedColumnName="id") 
*/ 
protected $post; 

类别:

class Category 
{ 
/** 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue 
*/ 
private $id; 

/** 
* @ORM\Column(name="title", type="string", length=64) 
*/ 
private $title; 

/** 
* @ORM\OneToMany(targetEntity="Post", mappedBy="category") 
*/ 
protected $posts; 

class Post 
{ 
/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $title; 
    /** 
* @ORM\ManyToMany(targetEntity="Tag", mappedBy="post") 
* @ORM\JoinTable(name="posts_tag") 
*/ 
protected $tag; 

和我的模板我张贴在我的行动领域包括hashtag:

<p class="lead"> 
    Category:<a href="{{ path('get_posts_for_category', {'category': post.category.title}) }}">{{ post.category }}</a> 
    </p> 
{% for tags in post.tag %} 
    <a class="btn btn-primary" href="{{ path('get_posts_for_tags', {'tags': tags }) }}">{{ tags }} <span class="glyphicon glyphicon-chevron-right"></span></a> 
    {% endfor %} 


public function indexAction(Request $request, $tag) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $posts = $em->getRepository('PillsBundle:Post') 
     ->getPostByTag($tags); 

这到底是功能:

public function getPostByTag($tag) 
{ 
    $date = new \DateTime; 

    $qb = $this->getEntityManager()->createQueryBuilder('p'); 

    $qb 
     ->select('p') 
     ->from('PillsBundle:Post', 'p') 
     ->getQuery(); 

    $query = $qb->getQuery(); 
    $results = $query->getResult(); 
    //  dump($results);exit; => I have all posts 
    // And I dont know what to do next, help 
} 

和第一类:

public function indexAction(Request $request, $category) 
    { 
    $em = $this->getDoctrine()->getManager(); 

    $posts = $em->getRepository('PillsBundle:Post') 
     ->getPostByCategory($category); 
    public function getPostByCategory($category) 
{ 
    $date = new \DateTime; 

    $qb = $this->getEntityManager()->createQueryBuilder('p'); 

    $qb ->select('p') 
     ->from('PillsBundle:Post', 'p') 
     ->join('p.category', 'c') 
     ->where('c = :category') 
     ->setParameter('category', $category) 
     ->getQuery(); 

    $query = $qb->getQuery(); 
    $results = $query->getResult(); 

    return $results; 
} 

如果我用这个QueryBuilder的我张贴(现在我张贴categoty.slug)这个功能需要? 帮助请

回答

0

你必须标记传递到查询,以便...

public function getPostByTag($tag) 
{ 
    $date = new \DateTime; 

    $qb = $this->getEntityManager()->createQueryBuilder('p'); 

    $qb 
     ->select('p') 
     ->from('PillsBundle:Post', 'p') 
     ->join('p.tag', 't') 
     ->where('t = :tag') 
     ->setParameter('tag', $tag) 
     ->getQuery(); 

    $query = $qb->getQuery(); 
    $results = $query->getResult(); 

    return $results; 
} 

应该这样工作,但你应该改变你的名字,是相当混乱,如果只发送一个标签,你必须把它称为标签,而不是标签。总是当你有很多标签属于一个实体,你必须把它称为标签,复数

+0

我更新我的问题 –

+0

更新我的答案:) –

+0

我更新我的问题。 $标记它不是实体CLAS标签,这是场主题标签,并在模板我forin帖子,并在行动hasTag这foring标签和后'{%,为post.tag%标签} {{ tags }} {%ENDFOR%}' –

相关问题