Re: DataObjects: joinAdd problem

From: Date: Tue, 25 Jan 2005 17:23:29 +0000
Subject: Re: DataObjects: joinAdd problem
References: 1 2 3  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-17150@lists.php.net to get a copy of this message
On Tue, 25 Jan 2005 14:11:51 +0100, toni <toni@pangea.org> wrote: > Hi, > > First, thank you for your responses. But, Justin, can you give me more > details of your propossed solutions? > > I'm a bit confused, because I call a method of "Noticia" class but I > need the information of the "Not_Tema" class. > > Can you explain where to put the whereAdd call and how to do the > comparison between id's , please? > if (!empty($temas)) { $nt =& DB_DataObject::factory('Not_Tema'); $this->joinAdd($nt); $whereSql = ''; foreach ($temas as $v) { if ($whereSql) { $whereSql .= ' OR '; } $whereSql .= 'Not_Not_Tema.idt = "'.$v.'"'; } $this->whereAdd($whereSql); } I think that should do it. > Thank's all. > Toni. > > El dl 24 de 01 del 2005 a les 09:52 -0800, en/na Justin Patrin va > escriure: > > On Mon, 24 Jan 2005 13:01:17 +0100, Toni <toni@pangea.org> wrote: > > > Hi, > > > > > > i'm coding a search page with DB_DO and I have a problem. > > > > > > My tables are: > > > Noticia: (id, titulo, ...); Tema: (id, ...); Not_Tema: (idn,idt); > > > > > > and my .links.ini: > > > [Not_Tema] > > > idn = Noticia:id > > > idt = Tema:id > > > > > > when I search from within Noticia class: > > > > > > $this->selectAdd('Noticia.id,titulo'); > > > $this->orderBy('titulo'); > > > > > > // search Noticias with a word within field "titulo": > > > if ($palabra!=''){ > > > $this->whereAdd("(titulo LIKE > > > '%".$palabra."%')"); > > > } > > > > > > // but only these ones that have a pair (idn,$v) in Not_Temas: > > > if (!empty($temas)) { > > > foreach ($temas as $v) { > > > $nt = new DataObjects_Not_Tema; > > > $nt->idt = $v; > > > > Instead of the above line, use whereAdd on $this and tell it to use OR > > instead of AND. Alternatively, you could just create the whole OR SQL > > yourself and whereAdd it after the loop. Or, my personal favorite, > > create an SQL list ('1', '2', '3') and use IN. "col IN > > ('1', '2', > > '3')" etc. > > > > > $this->joinAdd($nt,""); > > > } > > > } > > > > > > With only one value $v on pairs, this works, but how can I make that > > > works with more $v? > > > > > > This code generate ($v=3,$v=4): (DBDO error) > > > WHERE (titulo LIKE '%Salvador%') > > > AND Not_Not_Tema.idn=Not_Noticia.id AND Not_Not_Tema.idt = 3 > > > AND Not_Not_Tema.idn=Not_Noticia.id AND Not_Not_Tema.idt = 4 > > > > > > while I expect: > > > WHERE (titulo LIKE '%Salvador%') > > > AND (Not_Not_Tema.idn=Not_Noticia.id AND Not_Not_Tema.idt = 3 > > > OR Not_Not_Tema.idn=Not_Noticia.id AND Not_Not_Tema.idt = 4) > > > > > > Can I do this with joinAdd? > > > If not, how can I do? Only with plain sql? > > > > > > Thanks in advance for your help. > > > Toni. > > > > > > > -- > > Justin Patrin > > -- Justin Patrin

« previous php.pear.general (#17150) next »