学说:在refclass中指定日期的多对多

时间:2010-04-27 08:51:53

标签: php doctrine

residentSector:
        columns:
            id_resident_sector:
                type: integer
                primary: true
                autoincrement: true
            id_resident:
                type: integer(8)
            id:
                type: integer(8)
            date:
                type: timestamp 
residents:
        columns:
            id_resident:
                type: integer(8)
                primary: true
                autoincrement: true
            firstname:
                type: string(50)
            lastname:
                type: string(50)        
        relations:           
            Sectors:
                class: Sectors
                local: id_resident
                foreign: id
                refClass: residentSector 
Sectors:
        columns:
                id:
                     type: integer(4)
                     primary: true
                     autoincrement: true
                sector_name:
                      type: string(50)
                id_resp:
                      type: integer(4)
                visibility:
                      type: integer(1)

我想在给定日期(最新日期)中选择给定“部门”的所有“居民”。

我的问题是日期字段在refclass中(因为它是分配日期)所以

- > where('resident.Sectors.date = max(resident.Sectors.date)')

显然不会起作用,因为refclass不是集合的一部分..

定义学说关系的好方法是什么,以便我可以在居民的日期获得最新的部门?

提前致谢!

2 个答案:

答案 0 :(得分:1)

不幸的是,Doctrine并没有提供任何内置的方法来实现你想要做的事情。然而,多对多关系实际上使用了双重的一对多关系。

所以你需要的是:

  1. 进行正确的DQL查询:

    Doctrine_Query::create()
    ->from('Residents r')
    ->innerJoin('r.XXX rs WITH rs.date = ?', '08-04-2010')
    ->innerJoin('r.Sector s');
    

    XXXResidentSector表的名称。我不太确定它的名称是否与表名相同,但你可以从Doctrine生成的表定义中获取它的名字。

  2. 执行查询后,您必须使用Doctrine_Record::mapValue自行完成所有映射。

答案 1 :(得分:0)

我不知道如何使用学说,但是有多对多关系会导致大量重复数据。

你应该有3个表(居民,部门,居民)在residentToSectors表中指定日期,然后根据你在WHERE子句中插入的数据获取居民或部门的信息吗?