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不是集合的一部分..
定义学说关系的好方法是什么,以便我可以在居民的日期获得最新的部门?
提前致谢!
答案 0 :(得分:1)
不幸的是,Doctrine并没有提供任何内置的方法来实现你想要做的事情。然而,多对多关系实际上使用了双重的一对多关系。
所以你需要的是:
进行正确的DQL查询:
Doctrine_Query::create()
->from('Residents r')
->innerJoin('r.XXX rs WITH rs.date = ?', '08-04-2010')
->innerJoin('r.Sector s');
XXX
是ResidentSector
表的名称。我不太确定它的名称是否与表名相同,但你可以从Doctrine生成的表定义中获取它的名字。
执行查询后,您必须使用Doctrine_Record::mapValue
自行完成所有映射。
答案 1 :(得分:0)
我不知道如何使用学说,但是有多对多关系会导致大量重复数据。
你应该有3个表(居民,部门,居民)在residentToSectors表中指定日期,然后根据你在WHERE子句中插入的数据获取居民或部门的信息吗?