Update ..vzdy prepise vsetky zaznamy

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

Ahojte mam nasledny update.

$this->context->createZbozi()->update($values)
                          ->where(array('id' => 1,'users_id' => $this->user->getId()));

dotaz sa vykona ale neaplikuje sa WHERE :/ (nette 2.0.3 s namespace)
pouzivam nette databazu

co tam pisem zle :(
to WHERE som skusal rozne pisat ako som nasiel na nete ale uz je tolko verzii a updatov ze je to az neskutocne

Editoval HappyFace (4. 6. 2012 12:45)

fr
Člen | 8
+
0
-

cache smazana, v logu nic neni ?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Nepomůže prohodit volání update a where? Předpokládal bych, že update() bude exekutivní funkce, takže následné where už přichází s křížkem po funuse (dotaz už byl vykonán).

jtousek
Člen | 951
+
0
-

Přesně jak říká @vojtech.dobes. Nette\Database funguje tak, že si pomocí podmínek where a limit nejdříve identifikuješ množinu záznamů se kterou chceš pracovat a poté s ní něco provedeš – fetch / update / delete.

V případě podobných problémů vřele doporučuji podívat se, co vlastně Nette udělá.

Grelek
Člen | 233
+
0
-

Tenhle problém jsem také řešil. První musíš volat where.

$this->context->createZbozi()->where(array('id' => 1,'users_id'=>$this->user->getId()))->update($values);
HappyFace
Člen | 162
+
0
-

cache som sa uz dost vyzuril teraz ju mazem aj ked som na dev po kazom zasahu do db kodu (preistotu)

vojtech.dobes napsal(a):

Nepomůže prohodit volání update a where? Předpokládal bych, že update() bude exekutivní funkce, takže následné where už přichází s křížkem po funuse (dotaz už byl vykonán).

jj v tom to bolo .. Update je ukoncenie dotazu a zatim uz nic sa neda napisat

Takto to uz funguje ako ma :) dik za pomoc

$this->context->createZbozi()->where('id', $this->id)->update($values);
besir
Člen | 170
+
0
-

vojtech.dobes napsal(a):

Nepomůže prohodit volání update a where? Předpokládal bych, že update() bude exekutivní funkce, takže následné where už přichází s křížkem po funuse (dotaz už byl vykonán).

Škoda, že se to tu neřešilo o pár dní dříve :D Já kvuli tomu přešel na dibi :D, tohle mi totiž nedošlo :D

HappyFace
Člen | 162
+
0
-

Caute ..nechcel som zakladat novu temu ked to viac menej stale patri pod tento problem

problem:

  • mam 2 tabulky Users a Objednavky
  • objednavky maju FK users_id
  • potrebujem teraz vypisat Users(to nieje problem) ale aj s poctom:COUNT ich objednavok co zatial spravili

ako napisem condition pre tabulku user a objednavky? respektyve ten join ce NETTE/database

skusal som nieco taketo ale nedokazalo to poskladat ten join

$this->_user = $this->context->createUsers()->select('*,COUNT(objednavky.id) AS obj')->where('users.id = objednavky.users_id');

potreboval by som napisat nieco taket

select users.*, (select count(objednavky.id) from objednavky where objednavky.users_id = users.id) as ocount from users

Editoval HappyFace (5. 6. 2012 10:40)

motorcb
Člen | 551
+
0
-

HappyFace: K tomuto vláknu to opravdu nepatří.

$this->context->database->table('users')->select('users.*')->select('COUNT(objednavky:id) AS obj')->group('id');

nebo si setrojíš dotaz tak jak potřebuješ

$this->context->database->query("SELECT co FROM ... ");
HappyFace
Člen | 162
+
0
-

dik .. som to vyskusal .. vracia to co som potreboval ale len jeden riadol :(
este som vyskusal aj ten vlastny dotaz co je som hore doplnil ale ten padne na chybe ked to ukladam do datagridu, lebo ten vysledok nieje typu Nette\Database\Table\Selection

da sa to nejako transformovat alebo este lepsie priamo implementovat do modelu Users?

class Users extends Selection
{
    public function __construct(\Nette\Database\Connection $connection)
    {
        parent::__construct('users', $connection);
    }
}
motorcb
Člen | 551
+
0
-

HappyFace: Jen jeden řádek? Zkus se podívat zda ti to v laděnce ukazuje správně sestavený dotaz a zkus si ho z laděnky zkopírovat a vykonat v nějakém SQL klientu (phpMyAdmin)

HappyFace
Člen | 162
+
0
-

prave ze ladenka ukazuje ze vsetko je ok, vrati mi to spravny pocet vysledkou (totaz som prvone napisal v konsoly tak je 100% funkcny) aj so spravnimy stlpcami len datagrit podporuje len object Selection takze to potrebujem nejako don natlacit a vsetko bude ok :)

HappyFace
Člen | 162
+
0
-

mam to :) .. trosku skusania a experimentovania a jeto :D

$this->_user = $this->context->database->table('users')->select('users.*,(SELECT COUNT(objednavky:id) FROM objednavky WHERE objednavky:users_id=users.id) AS obj');

dakujem za pomoc

HappyFace
Člen | 162
+
0
-

Tak nakoniec sa tam predsa len objavil bug :/

tie vysledky z DB su nejake poprehadzovane a jeden „chyba“ .. no on nechyba , z db ich pride napriklad 10 ale vypise sa mi len 9 len je tam 2× prvy riadok.

podla mna to robi ten pridany JOIN na konci toho query, ktory neviem odtial dat prec

Editoval HappyFace (5. 6. 2012 13:48)

vvoody
Člen | 910
+
0
-

Co takto zistovat count v sablone?

{foreach $users as $user}
<div>{$user->name} - {$user->related('objednavky')->count()}</div>
{/foreach
motorcb
Člen | 551
+
0
-

HappyFace: Nejdřív oznam jestli je problém v SQL dotazu nebo ve výpisu výsledku toho dotazu…