【发布时间】:2018-06-04 14:32:43
【问题描述】:
我有以下数据库结构:
项目清单 trips(ManyToMany 到表 trips_tags 上的标签) +----+----------------+ |编号 |姓名 | +----+----------------+ | 1 |捷克共和国 | | 2 |德国 | | 3 |波兰 | +----+----------------+ 标签 +----+------------+ |编号 |姓名 | +----+------------+ | 1 |山脉 | | 2 |海滩 | | 3 |城市 | +----+------------+ trips_tags +---------+---------+ | trips_id |标签_id | +---------+---------+ | 1 | 1 | | 1 | 2 | | 3 | 1 | +---------+---------+我需要选择包含我指定的所有标签的行程。
- 需要将 Mountains 标记为 Beach 我只得到捷克共和国。
- 只需要标签山脉的旅行,获得捷克共和国和波兰
我写了一个简单的SQL
SELECT trip.name, trip.id
FROM trips AS trip
WHERE (
SELECT COUNT(trip_tag.tags_id)
FROM trips_tags AS trip_tag
WHERE trip_tag.tags_id IN (1, 2)
AND trip_tag.trips_id = trip.id
) = numberOfTags`
现在我在用 DQL 编写此 SQL 时遇到问题。有人可以帮忙吗?
谢谢
【问题讨论】:
-
你在什么框架下工作?通常,如果您使用 Doctrine,您会创建实体类,然后使用 Doctrine PHP 注释并在这些类中建立关系。你永远不应该写这样的裸查询。一切都应该在 Doctrine 本身中处理。
-
我在 Nette FW 工作。我对实体的设计没有问题,但我不知道如何在 DQL 中创建查询 :)
-
很公平,我不清楚你是否得到了那部分。
标签: php doctrine-orm query-builder