我的问题:即使第二个表没有相应的条目,也可以从带有PROPEL2的2个db表中获取查询结果。如果第二个具有相应的条目,则没有问题。
我有3张桌子:Entry,Contingent和Favorit
架构如下:
Entry.id [PK]
Entry.contingent_id [FK]
Entry.expert_id
Contingent.id [PK]
Contingent.name
Favorit.id [PK]
Favorit.contingent_id [FK]
Favorit.expert_id
Favorit.pos
我想获取一个指定的expert_id($ id)来自Entry with contingent-name的所有条目,如果存在此专家和特遣队的favorit.pos。我得到了通缉:
$result = EntryQuery::create()
->filterByExpertId($id)
->join('Entry.Contingent')
->withColumn('Contingent.name','_contingentName')
->join('Contingent.Favorit')
->where('Favorit.expert_id = ?', $id)
->find();
仅当存在这样的偏好时才有效。在某些情况下,此元素不存在(系统需要什么)。在这些情况下,我想得到的结果也只是将favorit.pos视为空,null或0.但Propel不会将这些记录返回给我。
使用MySQL我没有问题可以得到理想的结果:
SELECT entry.* ,
(SELECT favorit.position
FROM contingent, favorit
WHERE
favorit.expert_id = entry.expert_id
AND entry.contingent_id = contingent.id
AND contingent.id = favorit.contingent_id
)
FROM `entry`
JOIN contingent
ON entry.contingent_id = contingent.id
WHERE
entry.expert_id=1;
答案 0 :(得分:0)
在代码中使用Join left:
->join('Contingent.Favorit','selection conditon','left' )
当条件为false时,当空数据库时,这将停止工作
在'id'=$id