学说1.2:在DQL中将userprofile加入城市和城市

时间:2011-12-16 14:26:27

标签: join symfony-1.4 doctrine-1.2 dql

我正在使用Doctrine 1.2和Symfony 1.4来编写查询。我理解DQL的原理,我有几个查询工作正常。但是对于某些需求,我没有在DQL中找到解决方案,而是使用SQL代替。

这是一个简单的例子:假设你在schema.yml中有一个与城市类有关系的sfguarduserprofile类(在配置文件中使用city_id)。 并且您在城市类和国家/地区类之间存在关联(使用城市类中的country_id)。

我只是尝试编写DQL查询以获取具有城市名称和国家/地区名称的用户个人资料。看起来很简单?

是的,但我没有在DQL中找到“干净”的解决方案,因为我在sfguarduserprofile和country class之间没有直接的别名或关系。

我可以在我的sfguarduserprofile和我的国家级之间建立直接关系,但我不再尊重模型化的最佳实践(MERISE)。

我可以使用我的City类中的select并获取userprofile和country(City与这两个表有关系),但是我无法使用此解决方案,因为我还有其他联接来自我的sfguarduserprofile。

在SQL中,它很容易,但我想使用doctrine对象。

如果你有一个“干净”的解决方案,我会很高兴知道它!

谢谢

Sandrino

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,它很简单但过去没有用,因为我的schema.yml没有针对Doctrine进行优化。以下是工作查询的示例:

 $q = Doctrine_Query::create()
        ->select('p.user_id, u.username, c.name, co.name')
        ->from('sfGuardUserProfile p')
        ->leftJoin('p.User u')
        ->leftJoin('p.City c')
        ->leftJoin('c.Country co')
        ->orderBy('p.user_id');