Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 9 měsíci

knyttl
dibi guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Jak volat dříve join() před from() na DibiFluent

Ahoj,

mám jeden obecný model a k němu několik specifických, které od něj dědí.

Metoda fetch() v obecném modelu provede několik operací, které se mají aplikovat pro všechny. Tedy konkrétně provede jeden JOIN, WHERE a ORDER.

Ve specifickém modelu potom volám FROM a další WHERE.

Problém je ten, že JOIN se zařadí před FROM a dotaz je neplatný. Přesouvat ten JOIN z obecného do specifického po klauzulu FORM by znamenalo duplicitu mezi všemi specifickými modely, což určitě nechci. Jak na to?

Děkuju

 

#2 před 9 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Jak volat dříve join() před from() na DibiFluent

Nijak, přepiš svoje modely tak, aby nezávisely na pořadí zavolání nějakých metod.


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#3 před 9 měsíci

knyttl
dibi guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Re: Jak volat dříve join() před from() na DibiFluent

Ony na tom nezávisí. Já jen prostě chci mít obecné věci v obecném modelu a specifické ve specifickém. To DibiFluent má problém s pořadím.

 

#4 před 9 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Jak volat dříve join() před from() na DibiFluent

Ne, ty máš problém :) Je sice pravda, že to from by to mohlo řadit před ostatní, ale pochybuju, že se to bude chtít Davidovi předělávat.


Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#5 před 9 měsíci

knyttl
dibi guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Re: Jak volat dříve join() před from() na DibiFluent

No to bez diskuse je můj problém!

Ale tak opravdu, jak bys to udělal jinak? Př.

CommonModel::fetch() {
        return dibi::select('t.*')->join('tags', 'tt')->using('fruit_id')->where('state = "ok"');
}

AppleModel::fetch() {
        return parent::fetch()->from('apples');
}

PearModel::fetch() {
        return parent::fetch()->from('pears');
}

Editoval knyttl (21. 8. 2011 21:56)

 

#6 před 9 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Jak volat dříve join() před from() na DibiFluent

Já bych v první řadě statický model už nikdy nepsal :)

CommonModel::whereTags(DibiFluent $q) {
        return $q->join('tags', 'tt')->using('fruit_id')->where('state = "ok"');
}

AppleModel::fetch()
{
        return self::whereTags(dibi::select('t.*')->from('apples'));
}

PearModel::fetch()
{
        return self::whereTags(dibi::select('t.*')->from('pears'));
}

Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#7 před 9 měsíci

knyttl
dibi guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Re: Jak volat dříve join() před from() na DibiFluent

To byl jen příklad, chtěl jsem aby bylo zřejmý, co k čemu náleží. Statický to nemám.

To whereTags se mi ale vůbec nelíbí – předávám něco rodiči, pak to vracím dítěti… Prostě to není hezké.

 

#8 před 9 měsíci

HosipLan
dibi guru
Registrovaný: 1. 6. 2009
Příspěvky: 2630

Re: Jak volat dříve join() před from() na DibiFluent

To se pleteš http://sourcemaking.com/…plate_method

Každopádně, zapsal jsem to tak, jakou jsi zvolil formu. Kdybych to měl rozvést:

class CommonModel extends Nette\Object
{
        protected function whereTags(DibiFluent $q)
        {
                $q->join('tags', 'tt')->using('fruit_id');
        }

        protected function whereIsStateOK(DibiFluent $q)
        {
                $q->where('state = "ok"');
        }
}

class AppleModel extends CommonModel
{
        public function fetch()
        {
                $q = $this->db->select('t.*')->from('apples');
                $this->whereTags($q);
                $this->whereIsStateOK($q);
                return $q;
        }
}

Neptej se, jestli se můžeš ptát | Blog | Twitter | GitHubCMS Kdyby

Nette Jabber Room – nette@conf.netlab.cz , všichni jste vítáni

 

#9 před 9 měsíci

knyttl
dibi guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Re: Jak volat dříve join() před from() na DibiFluent

Zajímavé, díky!

 

Zápatí