Я пытаюсь найти связанные объекты для одного объекта путем сопоставления тегов объектов. Я построил запрос MySQL, который будет возвращать объекты, которые наиболее соответствуют, подсчитывая соответствующие теги.
Я новичок в doctrine (1.2), поэтому мне интересно, может ли кто-нибудь помочь мне встать на правильный путь, изменив мою схему и создав запрос DQL? Большая проблема состоит в том, что два набора тегов не связаны друг с другом в моем schema.yml, я бы предположил.
schema.yml:
Object:
columns:
name:
relations:
Tags: { foreignAlias: Objects, class: Tag, refClass: Tagset}
Tagset:
columns:
object_id: {type: integer, primary: true, notnull: true}
tag_id: { type: integer, primary: true, notnull: true }
relations:
Object: { foreignAlias: Tagsets }
Tag: { foreignAlias: Tagsets }
Tag:
columns:
name: { type: string(255), notnull: true }
Object: { foreignAlias: Tags, class: Object, refClass: Tagset}
Вот запрос mysql, который работает по схеме выше:
SELECT object.name, COUNT(*) AS tag_count
FROM tagset T1
INNER JOIN tagset T2
ON T1.tag_id = T2.tag_id AND T1.object_id != T2.object_id
INNER JOIN object
ON T2.object_id = object.id
WHERE T1.object_id = 2
GROUP BY T2.object_id
ORDER BY COUNT(*) DESC