php - Propel:即使第二个表没有相应的条目,也可以从 2 个数据库表中获取查询结果

标签 php mysql symfony propel

我的问题:使用 PROPEL2 从 2 个数据库表中获取查询结果,即使第二个表没有对应的条目。如果第二个有相应的条目就没问题。

我有 3 个表:Entry、Contingent 和 Favorit。
架构如下:

条目.id [PK]
entry.contingent_id [FK]
Entry.expert_id

特遣队.id [PK]
特遣队.name

Favorit.id [PK]
Favorit.contingent_id [FK]
Favorit.expert_id
收藏位置

我想为指定的 expert_id ($id) 从 Entry 中获取带有 contingent-name 的所有条目,如果存在该专家和 contingent 的 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

关于php - Propel:即使第二个表没有相应的条目,也可以从 2 个数据库表中获取查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36088897/

相关文章:

mysql - 如何使用加密密码连接mysql?

mysql - 使用 BIT_AND 运算符查询 MySQL

mysql - RLIKE 与子查询?

php - Symfony2 SonataClassificationBundle 从数据库查询

php - 需要帮助以创造性的方式显示 wordpress 菜单

php pdostatement::execute 永远执行

symfony - 如何从 symfony2 Controller 中的parameters.yml 读取?

php - 在 Twig Loader 链的顶部添加新的 Twig Loader

php - 使用 codeigniter 的 facebook 评论

javascript - 按首字母 JavaScript 分组的问题