php - Symfony 和 Doctrine 选择查询无法正常工作

标签 php mysql symfony1 doctrine

我在视频和播放列表表 (playlist_has_video) 之间有 M:M 关系

例如,如果我在播放列表中添加相同的视频 3 次,当我尝试从该播放列表中选择视频时,我只会得到一个结果(视频),但我需要得到 3 个结果(视频)。

我的查询是:

$q_videos = Doctrine_Query::create()
            ->select('V.*, PHV.*')
            ->distinct(FALSE)
            ->from('Video V')
            ->leftJoin('V.VideoSource VS')
            ->leftJoin('V.PlaylistHasVideo PHV')
            ->orderBy("PHV.position ASC")
            ->where('PHV.playlist_id = ? AND V.instance_id = ? AND VS.transcoded = ?', array($this->getObject()->getId(), sfContext::getInstance()->getUser()->getAttribute('instance_id'), 1));

我检查日志中的查询并确定:

SELECT v.id AS v__id, v.published AS v__published, v.share AS v__share, v.public AS v__public, v.title AS v__title, v.description AS v__description, v.thumbnail AS v__thumbnail, v.subtitle AS v__subtitle, v.created_at AS v__created_at, v.updated_at AS v__updated_at, v.views AS v__views, v.highlighted AS v__highlighted, v.created_by AS v__created_by, v.updated_by AS v__updated_by, v.instance_id AS v__instance_id, p.id AS p__id, p.playlist_id AS p__playlist_id, p.video_id AS p__video_id, p.position AS p__position FROM video v LEFT JOIN video_source v2 ON v.id = v2.video_id LEFT JOIN playlist_has_video p ON v.id = p.video_id WHERE (p.playlist_id = '1' AND v.instance_id = '1' AND v2.transcoded = '1') ORDER BY p.position ASC

当在 phpMyAdmin 中执行此查询时,它返回了良好的结果 - 3 个结果(视频)

Doctrine 版本:1.2.3 Symfony 版本:1.4.8

有人可以帮助我吗?

最佳答案

问题是您在 Video 上使用 leftJoin。您可以添加 ->groupBy('PHV.playlist_id') 并设置 ->from('PlaylistHasVideo PHV')

像 phpMyAdmin 这样的工具不会像 Doctrine 那样进行水合作用,因此您看到的结果与 Doctrine 提供的结果不同。

关于php - Symfony 和 Doctrine 选择查询无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8643363/

相关文章:

php - 任何从外部发布 WordPress 帖子的方法

php - Symfony 路由 - 可选参数

mysql - 通过掩码(正则表达式)从 MySQL 中获取子字符串

php - 复杂的 SQL(可能是外连接)

php - Symfony admin generator——保存和返回列表的按钮

symfony1 - 使用 sfDoctrineGuardPlugin 的 schema.yml

php - MySQL根据模板数据库创建数据库

php - 利用浏览器缓存在 PHP 项目的 htaccess 中不起作用

php - 从Mysql中检索数据并存储在选项html标签中

mysql - 返回不存在记录的id