Nette\Database – Row does not contain primary id column data
- JL
- Člen | 24
Ahoj,
omlouvám se, ale dělám něco špatně a chtěl bych vás poprosit
o radu.
Mám tabulku kde mám primární klíč ID a nějaké další sloupce. Chtěl bych udělat update všech řádků, kde jsou ty další sloupce nějakých hodnot. Skončím ale s hláškou „Row does not contain primary id column data“.
Nastíním to univerzálně tady:
$updated = $this->connection->table('table')
->where('column1', $col1)
->where('column2', 1)
->where('table2.column1', $foreignValues)
->update(
array(
'status' => 4,
)
);
V update jako takovém ale problém asi není, protože stejnou hláškou končí i pokus o fetch dat. Cache je smazaná.
Díky moc, Jarda
- JL
- Člen | 24
Nevím proč jsem si myslel že texy! dump bude lepší :-)
SQL dump:
http://pastebin.com/F3cGhMLj
Editoval JL (16. 2. 2013 21:07)
- JL
- Člen | 24
Pravděpodobně, resp. téměř jistě, mi tam zlobí ten dotaz do druhé tabulky.
Výstup v laděnce je:
UPDATE `tip` SET ? WHERE (`opportunity_id` = ?)
AND (`resolution_id` = ?)
AND (`opportunity_possible_result`.`possible_result_id` IN (?))
tedy úplně chybí JOIN, nevím, momentálně jsem už zmatený, jdu to ještě jednou projít.
Zhruba (ve výsledku chci update) takovýto dotaz je cílem:
$this->connection->query('
SELECT (tip.id) FROM tip
JOIN opportunity_possible_result AS opr
ON (opr.id = tip.opportunity_possible_result_id)
WHERE tip.opportunity_id = ?
AND resolution_id = ?
AND opr.possible_result_id = ?', 11, 1, 8)
Mám pocit jestli není problém v ambigous opportunity_id
,
protože to je v této i v odkazované tabulce.
Díky.
Editoval JL (16. 2. 2013 21:43)
- JL
- Člen | 24
@vvoody:
Zlobí mi už tohle:
$this->connection->table('tip')
->where('opportunity_id', 11)
->where('resolution_id', 1)
->where('opportunity_possible_result.possible_result_id', 8)
->fetch();
takže na základě toho si teď myslím, že je problém v tom že mám
sloupec opportunity_id
v tabulce tip
i v tabulce
opportunity_possible_result
akorát že k téhle teorii mi nesedí
chybová hláška
@enumag:
Že v update nemůžu mít joiny vím, spíš jsem to špatně formuloval.
Neprojde mi právě ani selection, takže jsem to myslel tak, že přidat
volání update už na to nemá vliv.
EDIT: Ne, tak jsem to skutečně myslel špatně a na dva dotazy to musím rozdělit tak jak psal @enumag, nicméně ta úplně hlavní chyba byla v tom, že jsem si asi špatně fetchoval data do té podmínky where co odkazovala do propojené tabulky. Až to prověřím tak to tu potvrdím a nevím jestli pak nesmazat celé tema aby moje blbost zbytečně nemátla ostatní. ANO, BYLO TO TAK, stačilo do where dát místo již provedeného fethPairs reprezentaci tabulky ošezanou pomocí where.
Děkuju a moc se omlouvám všem co se mnou ztráceli svůj čas.
Editoval JL (17. 2. 2013 1:41)