Zistenie id zazname hned po jeho vlozeni

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

Caute, vkladam zaznam do databazy, ktorý je tvorený údajmi z formulára. Ako zistím po hned po jeho vlozeni jeho id (vramci jednej metody)…

cast kodu

<?php
$values = $button->getForm()->getValues();
//vlozenie zaznamu
$this->horninaRepository->findAll()->insert($values);

?>
Oli
Člen | 1215
+
0
-

Musí to být insert. Pokud by jsi použil update, tak vrací počet řádků.

$lastInsert = $this->horninaRepository->findAll()->insert($values);
cujan
Člen | 410
+
0
-

a to konkretne id ako z toho vycucnem..
a este jedna vec pridava mi to ten zaznam dvakrat…
vdaka

Editoval cujan (13. 2. 2014 9:16)

romiix.org
Člen | 343
+
0
-

$lastInsert obsahuje IRow, takže $lastInsert->id (id je názov stĺpca v DB).

Oli
Člen | 1215
+
0
-

Buď jak píše romiix.org, nebo stačí samotné $lastInsert. Tzn. Můžeš volat třeba něco jako

$lastInsert = $this->horninaRepository->findAll()->insert($values);

$arr = [
	// Samotné $lastInsert vrací to samé jako $lastInsert->id (respektive vrací imho primary key)
	'hornina_id' => $lastInsert
];
cujan
Člen | 410
+
0
-

ano pomohlo vyriesene a pochopene :D

dakujem

cujan
Člen | 410
+
0
-

predsa este jedna vec kod

<?php
$priradeneTextury = $this->horninaTexturaRepository->findBy(array('idHornina'=> $id))->fetchColumn('idCiselnikTextura');
?>

mi hadze chybu aj ked predtym mi to v pohode fungovalo

Call to undefined method Nette\Database\Table\Selection::fetchColumn()

vdaka

cujan

David Matějka
Moderator | 6445
+
0
-

@cujan: nepamatuju si, ze by selection nekdy melo metodu fetchColumn

cujan
Člen | 410
+
0
-

Tak mam aplikaciu., ktora funguje v starsej verzii nette a tam to pouzivam…
ono nasiel som v dokumentacii, ze fetchColumn() sa ma prepisat na fetchField

přejmenujte metody exec() → query(), fetchColumn() → fetchField() a lastInsertId() → getInsertId()

ale zas ked to len premenujem tak to nefunguje :D

cujan

David Matějka
Moderator | 6445
+
0
-

fetchField() je na ResultSet, ne na Selection, na selection pouzij
->fetch()->idCiselnikTextura

cujan
Člen | 410
+
0
-

super ale vzbere mi iba jeden zaznam, ked chcem vybrat vsetky co splnaju danu podmienku?

cujan
Člen | 410
+
0
-

oki pouzil som fetchAll, dumpol sopm si to a vzhodilo mi uz to co chcem len neviem ako vycucnut konkretne hodnoty…potrebujem idCislenikTextura

dump

<?php
array (2) ▼
4 => Nette\Database\Table\ActiveRow #ed94 ▼
table private => Nette\Database\Table\Selection #d257 ►
data private => array (2) ▼
id => 4
idCiselnikTextura => 2
dataRefreshed private => FALSE
isModified private => FALSE
5 => Nette\Database\Table\ActiveRow #15a6 ▼
table private => Nette\Database\Table\Selection #d257 ►
data private => array (2) ▼
id => 5
idCiselnikTextura => 4
dataRefreshed private => FALSE
isModified private => FALSE
?>
Etch
Člen | 403
+
0
-

Nějakou iterací nad tím polem???

foreach($foo AS $bar){
	echo $bar->idCiselnikTextura;
}
Oli
Člen | 1215
+
0
-

Pokud chceš jen IDčka, tak si je vyplň v selectu:

$horniny = $this->connection->table('horniny')->select('id');

foreach($horniny as $value)
{
	dump($value);
}

Ten fetchAll() nemusíš psát. Mám pocit, že se to používá (nebo používalo), pokud jsi ten samej výpis procházel několikrát… Já to ale standardně nepoužívám. Jestli to je dobře nebo ne, nevím :-)

cujan
Člen | 410
+
0
-

vdaka za rady, ale tak novsia verzia nette by mala byt krok dopredu a nie dozadu, takze sa musi dat nejako rozomne nahradit to fetchColumn(), lebo ja som to dalej spracovaval vo forme…a teraz sa mi to komplikuje…

cujan
Člen | 410
+
0
-

zaujimave je, ze v API dokumentacii je aj fetchField sktrtnute…tak toto fakt nechapem…

Mysteria
Člen | 797
+
0
-

A o co konkrétně ti jde? Jestli potřebuješ pole hodnot jednoho sloupečku z tabulky, tak buď

$this->database->table('table')->select('sloupec')->fetchAll();

nebo

$this->database->table('table')->fetchPairs(NULL, 'sloupec');