vrana/notorm

Nefunguje mazání?

Closed this issue · 5 comments

echo $product->product_element()->count('*') . "\n";
echo $product->product_element()->delete() . "\n";
echo $product->product_element()->count('*') . "\n";

...vypíše 13, 13, 13, kdežto

echo $this->db->product_element()->where('productId', $product['id'])->count('*') . "\n";
echo $this->db->product_element()->where('productId', $product['id'])->delete() . "\n";
echo $this->db->product_element()->where('productId', $product['id'])->count('*') . "\n";

...vypíše 13, 13, 0. Jakto? Mám pullnutou nejnovější revizi.

Mazání funguje, ale ten počet je nakešovaný. Zkusím vymyslet co s tím, protože teď jde keš smazat jen celá, což by bylo problematické u kódu typu:

foreach ($db->product() as $product) {
    if ($product->product_element()->count('*')) {
        $product->product_element()->delete();
    }
}

Tam by se totiž počet zjišťoval při každém průchodu cyklem znovu.

Tak to už je jasné. Ono to kešovat může, ale je dobré, když o tom vývojář ví a v případě potřeby to může nějak, třeba pro určitý úsek kódu, potlačit. Toto už jsem jednou zažil v ORM (konkrétně Propel), že jsem se za boha nemohl dostat v kódu ke změnám, které jsem provedl v databázi o řádek výš. A keš vypnout prostě nešla.

Potom prosím alespoň nějak zmínit v dokumentaci, kdy a kde se co kešuje :) protože tohle pro mě byl celkem nepochopitelný stav, ale kdybych si o tom někde něco přečetl, tak si řeknu OK, napíšu to třeba jinak, je to feature :)

Tohle rozhodně není feature, ale bug.

Dobře, chápu. U ORM je to feature, u ¬ORM to logicky musí být bug :D

Alespoň jsem to zdokumentoval:

the result is stored to memory so following modifications will not affect it