使用Doctrine在Symfony中获取类似的实体

时间:2014-10-17 15:12:43

标签: mysql symfony doctrine-orm doctrine dql

我在Symfony for Videos中有一个实体。让我们说db看起来像这样:

id: int
name: varchar
uploader: int (User Entity)
video_mp4: varchar
param1: int
param2: int
param3: int

我想加载类似的视频。类似的意思是:

  • 或相同的Uploader
  • 或者相同的Param1
  • 或者相同的Param2
  • 或者相同的Param3

实际上我想通过大多数匹配来订购它们(意味着由同一个用户上传的视频和相同的param1 + param3应该比param2匹配的更重要)类似于{{1}任何想法如何实现 为此,我使用了这个查询(是的,我知道"或者"对数据库不好,欢迎消费;)

我在我的Entity类中创建了一个如下所示的函数:($ q是一个QueryBuilder)

ORDER BY mostMatches DESC

两个问题:

  1. 如何在实体中获取QueryBuilder,我不想从我的Controller中传递它。
  2. 是否有更好的方法来加载类似的条目?
  3. 我如何通过最相似的方式(uploader,param1,param2,param3)订购它们,确定我可以用PHP做到这一点但是如果结果7是100%匹配但是我只加载了6?

1 个答案:

答案 0 :(得分:1)

您可以将所有这些匹配项加起来:

SELECT
    *,
    (CAST(e.uploader = ?1 AS UNSIGNED)
    + CAST(e.param1 = ?2 AS UNSIGNED)
    + CAST(e.param2 = ?3 AS UNSIGNED)
    + CAST(e.param3 = ?4 AS UNSIGNED)
    ) AS matches_count
FROM video
ORDER BY matches_count DESC