我正在尝试使用symfony 1.4.20在Propel 1.6上运行此查询。
我想将2个参数绑定到此子查询,但它不起作用。
$paginas = PaginaQuery::create()
->where("pagina.id not in (select id from cliente_artista where cliente_artista.cliente_id = ? and cliente_artista.culture = ?)"
,array('XXX', 'en')
)
->limit(5)
->find();
这给了我错误:
Cannot determine the column to bind to the parameter in clause
我也找到了这篇文章,但没有答案(https://groups.google.com/forum/?fromgroups=#!topic/propel-users/2Ge8EsTgoBg)
答案 0 :(得分:0)
而不是使用占位符。您可以使用$ id和$ culture:
//first, get an array of the id's
//define your vars
$id = $your_id_param;
$culture = 'en';
$cliente_artistas = ClienteArtistaQuery::create()
->select('id')
->distinct()
->filterByClienteId($id)
->filterByCulture($culture)
->find();
$paginas = PaginaQuery::create()
->where("pagina.id NOT IN ?", $cliente_artistas)
->limit(5)
->find();
如果必须在一个查询中完成此操作,建议使用原始sql并将参数绑定到PDO语句中(但这会丢失PropelObjectCollections的便利性):
public function getResultSet($id, $culture) {
$id = $id_param;
$culture = $culture_param;
$sql = <<<ENDSQL
SELECT * from pagina
WHERE id NOT IN (SELECT distinct id
FROM cliente_artista
WHERE cliente_id = ?
AND culture = ?
)
LIMIT 5
ENDSQL;
$connection = Propel::getConnection();
$statement = $connection->prepare($sql);
$statement->bindValue(1, $id);
$statement->bindValue(2, $culture);
$statement->execute();
$resultset = $statement->fetchAll(PDO::FETCH_ASSOC); // or whatever you need
if (! count($resultset) >= 1) {
// Handle empty resultset
}
return $resultset;
}
您还可以编写一些查询方法来使用propel orm query methods。当然,propel api是有益的参考。有几种方法可以做到这一点。我在这里指出了一种适合你的方法。
修改强> 这是一个关于将此作为一个查询执行的想法[因为useSelectQuery()需要'关系'名称],这个想法假定表不相关但是id是:
$paginas = PaginaQuery::create()
->addJoin(PaginaPeer::ID, ClienteArtistaPeer::CLIENTE_ID, Criteria::LEFT_JOIN)
->where("ClienteArtista.Id <> ?", $id)
->where("ClienteArtista.Culture <> ?", $culture)
->select(array('your','pagina','column','array'))
->limit(5)
->find();