Doctrine 优化多对多查询
Doctrine Optimize ManyToMany Queries
我得到了以下实体:
- 一个用户实体,它有一对多的产品和一对多的图片
- 具有多对多图像的产品实体
- 一个图像实体,对用户有 ManyToOne,以及(倒置的)ManyToMany 产品
连接到产品的图像也总是连接到同一个用户实体。
我想在 Table 中为当前用户显示产品及其图片。
- 为此,用户由用户提供程序加载。 (1 个查询)
- 然后它为用户获取 N 个产品(1 个查询)
- 然后它会询问由 ManyToMany table 加入的图像哪些图像连接到产品(N 查询)
如果可以的话,我想以某种方式优化最后的查询。我的想法是因为我已经知道会有什么样的图像,因为用户一对多关系。
我可以做些什么让它变得更好?尝试构建我自己的查询?我自己的水龙头?也许缓存图像实体就足够了?
我尝试使实体及其关系可缓存,但这似乎并没有减少查询量。
根据您的解释:
您需要从用户端(产品和图像)加载。可能会加载未链接到用户的图像(以及未链接到用户的产品)。
您的问题来自产品和图像之间的多对多,这将迫使您从产品而非用户加载图像。
解决方案是更改您的数据库以匹配此:
其中包含所有 3 个外键的链接 table 对所有 3 个都具有 uniq 约束。
这样,如果您使用 DQL 或 SQL.
,您只需从用户的 1 个查询中加载所有内容
我得到了以下实体:
- 一个用户实体,它有一对多的产品和一对多的图片
- 具有多对多图像的产品实体
- 一个图像实体,对用户有 ManyToOne,以及(倒置的)ManyToMany 产品
连接到产品的图像也总是连接到同一个用户实体。
我想在 Table 中为当前用户显示产品及其图片。
- 为此,用户由用户提供程序加载。 (1 个查询)
- 然后它为用户获取 N 个产品(1 个查询)
- 然后它会询问由 ManyToMany table 加入的图像哪些图像连接到产品(N 查询)
如果可以的话,我想以某种方式优化最后的查询。我的想法是因为我已经知道会有什么样的图像,因为用户一对多关系。
我可以做些什么让它变得更好?尝试构建我自己的查询?我自己的水龙头?也许缓存图像实体就足够了?
我尝试使实体及其关系可缓存,但这似乎并没有减少查询量。
根据您的解释:
您需要从用户端(产品和图像)加载。可能会加载未链接到用户的图像(以及未链接到用户的产品)。
您的问题来自产品和图像之间的多对多,这将迫使您从产品而非用户加载图像。
解决方案是更改您的数据库以匹配此:
其中包含所有 3 个外键的链接 table 对所有 3 个都具有 uniq 约束。 这样,如果您使用 DQL 或 SQL.
,您只需从用户的 1 个查询中加载所有内容