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