php – Symfony2和Doctrine2:如何获取帖子的所有标签?
发布时间:2020-12-13 22:54:08 所属栏目:PHP教程 来源:网络整理
导读:在我的项目中,我在两个实体之间存在多对多关系:Post和Tag. (Post有一个变量’tags’). 我想允许用户通过他们的名字或他们的标签来搜索帖子(比如tumblr上的例子) 假设我在我的数据库中有这个: Name Tagspost1: "Recipe with eggs" cooking,chicken,egg post
在我的项目中,我在两个实体之间存在多对多关系:Post和Tag.
(Post有一个变量’tags’). 我想允许用户通过他们的名字或他们的标签来搜索帖子(比如tumblr上的例子) 假设我在我的数据库中有这个: Name Tags post1: "Recipe with eggs" cooking,chicken,egg post2: "Random Title" beef,egg post3: "Cooking Fish" fish,cooking post4: "Rice and chicken" rice,meat 因此,如果我在搜索表单中输入“鸡蛋”,我必须只返回post1(因为标签),post2(因为标签)和post4(因为名称). 但是我也希望为每个帖子检索所有相关的标签(post1的烹饪,鸡肉和鸡蛋……). 在我的控制器中,我有这个: //$data['search'] comes from a form and contains for exemple 'chicken egg' $searchString = $data['search']; $searchString = explode(' ',$searchString); $list = $repository->getPostByTag($searchString); 在我的PostRepository.php中,我创建了这个: public function getPostByTag($searchString) { $query = $this->createQueryBuilder('p')->leftJoin('p.tags','t'); $i = 0; foreach($searchString as $tag) { $query->orWhere('t.name like :tag'.$i.' OR p.name like :percent_tag'.$i) ->setParameter('tag'.$i,$tag) ->setParameter(':percent_tag'.$i,'%'.$tag.'%'); $i++; } $query->leftJoin('p.author','a') ->leftJoin('p.tags','t2') ->addSelect('t2') ->addSelect('a'); } 但是这个“getPostByTag”方法给了我非常随机的结果…… 解决方法
你能给我这个旋转吗?请注意修改后的方法名称,因为我们正在使用多个标记获取多个帖子.
public function getPostsByTags($tagArray = array()) { $query = $this->createQueryBuilder('p'); $i = 1; $tagObjects = this->getEntityManager()->getRepository('AcmeBundle:Tag') ->findByName(array('name' => $tagArray)); // This is case-insensitive by default foreach ($tagObjects as $tagObj) { $query->orWhere('?'.$i.' MEMBER OF p.tags')->setParameter($i,$tagObj); $i++; } foreach ($tagArray as $tag) { $query->orWhere('p.name LIKE ?'.$i)->setParameter($i,'%'.$tag.'%'); $i++; } $query->leftJoin('p.tags','t') ->leftJoin('p.author','a') ->addSelect('t')->addSelect('a') ->getQuery(); return $query->getResult(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |