使用 Propel 从另一个 table 获取信息?

Getting info from another table with Propel?

我有一个用户 table,它与另一个名为 town table 的用户有一个外键,

现在我正在尝试获取所有用户,包括他们所属城镇的名称,

$users = UserQuery::create()
 ->select(array('fos_user.id, fos_user.username, fos_user.email, town.name'))
 ->joinWith('Town')
 ->find();

我试过了,但由于某种原因抛出了 SELECT 执行错误。如果有人能指出我正确的方向,将不胜感激。

通过具体指定 table 我想加入的内容来解决此问题,然后传递 select 以获得我想要的字段。

$users = UserQuery::create()
        ->joinWith('Town')
        ->select(array('id','username', 'email', 'Town.name'))
        ->find()
        ->toArray();

您正在寻找的答案是 useXXXXQuery(),但我认为这不是正确的用法。

如果您的架构正确,您可以简单地调用 $user->getTown()->getName() 或者您可以在用户模型 getTownName() 上创建一个调用上述代码的方法。

您想要使用 useXXXXQuery() 的情况是您为用户创建关于其在国外的关系的条件 table:

$users = UserQuery::create()
                  ->filterByAge(13,Criteria::GREATER_THAN)
                  ->filterByStatus('active')
                    ->useTownQuery()
                    ->filterByName('Your Town')
                    ->endUse()
                  ->find();

现在这是用对象来做的。如果您要处理大量数据,这可能不是一个好主意,因为它会占用大量内存。我宁愿遍历对象而不是数组。让它更干净、更简单。