【发布时间】:2014-12-15 23:47:28
【问题描述】:
在我的项目中,我在两个实体之间存在多对多关系:Post 和 Tag。 (帖子有一个变量“标签”)。
我想让用户通过他们的名字或他们的标签搜索帖子(例如在 tumblr 上)
假设我的数据库中有这个:
Name Tags
post1: "Recipe with eggs" cooking, chicken, egg
post2: "Random Title" beef, chicken, egg
post3: "Cooking Fish" fish, cooking
post4: "Rice and chicken" rice, meat
因此,如果我在搜索表单中输入“chicken egg”,我只需要返回 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”方法给了我非常随机的结果...... 如何通过搜索他们的姓名和标签来获得每个帖子及其相关标签?
【问题讨论】:
-
您可以发布分析器生成的 DQL 吗?我也在为你构建一个解决方案,但这会很有帮助。
-
也想对 SO 表示欢迎。你写了一个很棒的第一个问题,看到它令人耳目一新。
-
谢谢你的欢迎:)
标签: php symfony doctrine-orm query-builder