NotORM používané Nette – dotazy

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

Co se druhého dotazu týče, jde o to, že $user neobsahuje pole, ale instanci, která se coby argument předává referencí. Po zavolání $this->getModel('user')->delete($user) v proměnné $user už není to, co v ní bylo před tím (metoda delete obsah té proměnné změní).

pYro
Člen | 29
+
0
-

Mel bych taky otazku.
Potreboval bych udelat join tabulky pres mnou definovany sloupec.

Rekneme, ze mam tabulku user a role. Kazdy user ma jednu roli, tudiz v tabulce user je sloupec role.
Klasicky podle pouziti notorm by se musel jmenovat role_id.

Podle dokumentace jsem si puvodne myslel, ze pomuze toto:

$role = $row->role()->via("role");

Ten vsak vola tabulku role.

Je nejak mozne jednoduse definovat sloupec, pres ktery se bude joinovat?

gawan
Člen | 110
+
0
-

NotORM fórum je tu. Inak to čo chceš, môžeš urobiť ak si vytvoríš vlastného potomka NotORM_Structure_Convention a upravíš funkciu getReferencedColumn alebo getReferencingColumn. Viz: http://www.notorm.com/#…

Oggy
Člen | 306
+
0
-

Na NotORM fóru mi nebylo odpovězeno..tak zkusím štěstí zde, určitě někdo NotORM používá..
nenapadá někoho čím by mohlo být způsobeno toto?

<?php
$product = BaseModel::fetchAll('product')->where("id", $product_id)->select("IF(newprice,newprice,price) AS price");
?>

dostávám takovýto sql dotaz

<?php
SELECT IF(newprice,newprice,price) AS price FROM product WHERE (id = 16) AND (id = 'price')
?>

ještě metoda BaseModel::fetchAll()

<?php
static function fetchAll($table) {
            return self::$notORM->{$table};
        }
?>
paranoiq
Člen | 392
+
0
-

napiš select před where
(kvůli tomu, že uvádíš select po where se NotORM domnívá, že atributy v select jsou součástí podmínky)

Editoval paranoiq (8. 12. 2011 10:30)

Oggy
Člen | 306
+
0
-

to je první co mě napadlo a pořadí na to nemá vliv. Nebo alespoň u mě .-) ..cache promazána :-)

petr.pavel
Člen | 535
+
0
-

Tak ti nevím, vyzkoušel jsem to u sebe:

$model = new PageModel;
$pokus = $model->db->page->where('id', $id)->select("IF(menu_title,menu_title,slug) AS title")->fetch();
dump($pokus['title']);

Hodí mi to tenhle dotaz a výsledkem je string, který jsem očekával.

SELECT IF(menu_title,menu_title,slug) AS title
FROM bwp_page
WHERE (id = '6')

Snad jedině zkusit upgradovat NotORM, víc mě nenapadá.

Jan Jakeš
Člen | 177
+
0
-

NotORM spojuje podmínky pomocí AND, pokud je voláš opakovaně. Typuji, že někde předtím nebo potom chceš vypsat ze stejné tabulky něco jiného a místo dvou různých dotazů do tabulky dostáváš jeden spojený, což je normální chovaní.

tomask
Člen | 9
+
0
-

Vytvářím zobecněnou abstraktní třídu pro správu tabulky. Této třídě je tabulka předána v konstruktoru jako

Nette\Database\Table\Selection

Potřebuji v metodě zahájit/potvrdit transakci. Projel jsem API k Selection a podle všeho není cesta jak docílit transakce. Líbilo by se mi mnou zamýšlené řešené předávat této třídě opravdu jen Selection na konkrétní tabulku, nikoliv celý databázový resource (díky kterému bych transakce ošetřil). Řešil někdo podobný případ?

Update k 20.4.2012
Jenom bych doplnil, že v novější revizi, aktuálně Nette 2.0.3 přibyla u Nette\Database\Table\Selection metoda getConnection(), která přesně řeší problém, na který jsem poukazoval. https://api.nette.org/…lection.html#…

Editoval tomask (20. 4. 2012 22:25)