Propel, похоже, не поддерживает это из коробки. Возьмите один из примеров, класс Book
. BookPeer::doSelect()
вызывает BookPeer::doSelectStmt()
и передает результат BookPeer::populateObjects()
. BookPeer::doSelectStmt()
вызывает BasePeer::doSelect()
, который всегда вызывает BasePeer::createSelectSql()
для создания оператора SQL, подготавливает его и передает его BasePeer::populateStmtValues()
для фактического связать значения.
Вы можете взять код из этих методов, чтобы получить что-то вроде этого (без исключения или обработки транзакций):
$criteria = new Criteria();
$criteria->addThis();
$criteria->addThat();
$con = Propel::getConnection($criteria->getDbName(), Propel::CONNECTION_READ);
$params = array();
$sql = BasePeer::createSelectSql($criteria, $params);
$stmt = $con->prepare($sql);
// $stmt is a prepared PDOStatement
// $params is an array of the form: [{'table': 'tableName', 'column': 'columnName', 'value': 'paramValue'}, ...]
// You can keep this format and use BasePeer::populateStmtValues(), or you can call $stmt->bindParam() yourself
// Now in the loop, we set the params ourself
foreach ($loop as $loopData) {
// Bind the params, using your preferred method
// ...
// Pass the prepared and bound statement to populateObjects()
$books = BookPeer::populateObjects($stmt);
// Do something with the found objects
// ...
}