Jarves\Storage\Propel::getStm PHP Method

getStm() public method

public getStm ( Propel\Runtime\ActiveQuery\ModelCriteria $query, Condition $condition = null ) : PDOStatement
$query Propel\Runtime\ActiveQuery\ModelCriteria
$condition Jarves\Configuration\Condition
return PDOStatement
    public function getStm(ModelCriteria $query, Condition $condition = null)
    {
        $params = [];
        $condition2Params = [];
        $id = hexdec(uniqid()) / mt_rand() + mt_rand();
        // check that the columns of the main class are already added (if this is the primary ModelCriteria)
        if (!$query->hasSelectClause() && !$query->getPrimaryCriteria()) {
            $query->addSelfSelectColumns();
        }
        $con = RuntimePropel::getServiceContainer()->getReadConnection($query->getDbName());
        $query->configureSelectColumns();
        $dbMap = RuntimePropel::getServiceContainer()->getDatabaseMap($query->getDbName());
        $db = RuntimePropel::getServiceContainer()->getAdapter($query->getDbName());
        $model = $query->getModelName();
        $tableMap = constant($model . '::TABLE_MAP');
        $query->setPrimaryTableName(constant($tableMap . '::TABLE_NAME'));
        //        $query->find($con);
        if ($condition) {
            $query->where($id . ' = ' . $id);
        }
        $sql = $query->createSelectSql($params);
        $conditionSql = '';
        if ($condition) {
            $condition2Params = $params;
            $conditionSql = $this->conditionOperator->standardConditionToSql($condition, $condition2Params, $this->getObjectKey());
        }
        if ($condition && $conditionSql) {
            $sql = str_replace($id . ' = ' . $id, '(' . $conditionSql . ')', $sql);
        }
        /** @var \PDOStatement $stmt */
        try {
            $stmt = $con->prepare($sql);
        } catch (\PDOException $e) {
            throw new PropelException('Could not execute query ' . $sql, 0, $e);
        }
        $db->bindValues($stmt, $params, $dbMap);
        if ($condition2Params) {
            foreach ($condition2Params as $idx => $v) {
                if (!is_array($v)) {
                    //propel uses arrays as bind values, we with Condition->toSql not.
                    $stmt->bindValue($idx, $v);
                }
            }
        }
        try {
            $stmt->execute();
        } catch (\PDOException $e) {
            throw new \PDOException($e->getMessage() . "\nSQL: {$sql}");
        }
        return $stmt;
    }

Usage Example

Ejemplo n.º 1
0
 public function getStm(ModelCriteria $query, Condition $condition = null)
 {
     $this->modifyCondition($condition);
     return parent::getStm($query, $condition);
 }