NOTORM – parametry v poddotazu se nepřenáší do dotazu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
barbucha
Člen | 11
+
0
-

Zdravím,
setkal jsem se z nádledujícím problémem

<?php
$company = $db->table('company')->select('person_id')->where('name', 'XYZ');

$person = $db->table('person')->where('id',$company)->where('name', 'Novak');
?>

Tento dotaz vytvoril spravne sql,

<?php
SELECT * FROM person WHERE ( id IN (SELECT person_id FROM company WHERE name = ?) ) AND
	(name = ?)
?>

ale provadeni zkoncilo z chybou

SQLSTATE[08P01]: <<Unknown error>>: 7 ERROR: bind message supplies 1 parameters, but prepared statement „pdo_stmt_00000003“ requires 2

Po blizsim pruzkumu jsem zjistil, ze „mizi“ parametr predavany u $company. Proto jsem lehce upravil knihovnu Nette/Database/Table/SqlBuilder.php, kde jsem za radek 164 pridal

<?php
$this->parameters[] = $clone->sqlBuilder->getParameters();
?>

PHP 5.4.9
Nette 2.0.8
Databaze – PostgreSQL 9.1

Tato chyba se neprojevuje v MySQL.

barbucha
Člen | 11
+
0
-

Oprava!
vyse uuvedene funguje jen pokud je v horni podmince jeden parametr, pro vice parametru je treba pouzit array_merge

<?php
$this->parameters = array_merge($this->parameters, $clone->sqlBuilder->getParameters());
?>
enumag
Člen | 2118
+
0
-

To vypadá jako bug, chtělo by to pull request s testem. ;-)

hrach
Člen | 1836
+
0
-

Imo je to v nette masteru fixle.