Propel:即使第二个表没有相应的条目,也能从 2 db 表中获取查询结果


Propel: Getting query results from 2 db tables even when second table has no corresponding entries

>我的问题:即使第二个表没有相应的条目,也可以从 2 个 db PROPEL2表中获取查询结果,即使第二个表没有相应的条目。如果第二个有相应的条目,那就没有问题了。

我有 3 张表:条目、或有和收藏夹。
架构如下:

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收藏夹

我想从条目中获取指定expert_id ($id) 带有或有名称的所有条目,如果存在该专家和特遣队的 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 时才有效。在某些情况下,此元素不存在(系统想要什么)。在这些情况下,我也想得到结果,只需将 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;

在代码中使用 join left:

->join('Contingent.Favorit','selection conditon','left' )

当条件为假时,当空数据库时,这仍然有效在像'id'=$id这样的条件下