Php 关系API:where()无法使用命名空间类确定列

Php 关系API:where()无法使用命名空间类确定列,php,namespaces,propel,Php,Namespaces,Propel,我正试着做这样的事情 $u=\Entity\UserQuery::create()->其中('User.Username=?','john')->findOne() 但是我得到了这个错误 无法确定要绑定到子句“User.Username=?”中参数的列 而相同的代码在非命名空间的上下文中也可以正常工作 我知道有更好的方法可以做到这一点,但我想知道为什么这会失败众所周知的问题: 解决问题的最佳方法是使用别名: $u = \Entity\UserQuery::create('alias')

我正试着做这样的事情

$u=\Entity\UserQuery::create()->其中('User.Username=?','john')->findOne()

但是我得到了这个错误

无法确定要绑定到子句“User.Username=?”中参数的列

而相同的代码在非命名空间的上下文中也可以正常工作

我知道有更好的方法可以做到这一点,但我想知道为什么这会失败众所周知的问题:

解决问题的最佳方法是使用别名:

$u = \Entity\UserQuery::create('alias')
    ->where('alias.Username = ?', "john")
    ->findOne();
以下代码也应该起作用:

$u = \Entity\UserQuery::create('alias')
    ->where('Entity\UserQuery.Username = ?', "john") // or ->where('\Entity\UserQuery.Username = ?', "john")
    ->findOne();
问候,,
William指定第三个参数binding type帮助我:

$u = \Entity\UserQuery::create()
    ->where('alias.Username = ?', "john", \PDO::PARAM_STR)
    ->findOne();

我很好奇为什么您使用关系API而不是ActiveQuery类,也就是说,仅仅一个
\Entity\UserQuery::create()->filterByUserName('john')->findOne()
就可以浏览,因为这是一个没有任何连接的简单查询,等等。