Oznámení
Omlouváme se, provoz fóra byl ukončen
DibiFluent a ->whereExists
Upozornění: Tohle vlákno je hodně staré.
před 10 lety
- blacksun
- Člen | 181
Zdravím,
narazil jsem na problém, kdy se při použití ->where a ->whereExists ve vygenerovaném dotazu nepřidává před whereExists „spojka“ AND. Pokud za ->whereExists použije další ->where, nepřidává se už pak také.
Trochu kódu:
<?php
if($form['use_statute']) {
$select->where('[st].[id]')->in($form['statute_select']);
}
if($form['use_price']) {
$select->where('[r].[end_price]'.$form['price_greater']."'".$form['price_value']."'")
->and('[r].[currency]='."'".$form['price_currency']."'");
}
if($form['use_date_created']) {
$select->where('[r].[created]'.$form['date_created_greater']."'".$form['date_created_value']."'");
}
if($form['use_product']) {
$select->whereExists(dibi::select("1")->from('[delivery_contents]')->where('[product_id]')->in($form['product_select'])->where('[reference_id]=[r].[id]'));
?>
generuje
<?php
`SELECT `r`.`id`, `r`.`label`, `r`.`date_delivery_month`, `r`.`date_delivery_year`, `r`.`end_price`, `r`.`currency`, `r`.`customer_name_en`, `ci`.`name_en` as `city_name`, `co`.`name_en` as `country_name`, `p`.`name` as `partner_name`, `st`.`name_en` as `statue_name`, date_format(`r`.`created`,'%Y/%m/%d') as `created` FROM `reference` `r` JOIN `city` `ci` ON `r`.`city_id`=`ci`.`id` JOIN `statute` `st` ON `r`.`statute_id`=`st`.`id` JOIN `country` `co` ON `ci`.`country_id`=`co`.`id` LEFT OUTER JOIN `partner` `p` ON `r`.`partner_id`=`p`.`id` WHERE `st`.`id` IN ('2') AND `r`.`end_price`<'70' AND `r`.`currency`='EUR' AND `r`.`created`<'2009-04-09' WHERE EXISTS ( SELECT 1 FROM `delivery_contents` WHERE `product_id` IN ('5', '10') AND `reference_id`=`r`.`id` ) AND concat(`r`.`date_delivery_year`,'-',`r`.`date_delivery_month`)<'2009-04' ORDER BY `ci`.`name_en`
?>
Případně li-je nějaká rada, jak toto upravit.
Edit: Ani před samotné ->exists se AND nepřidá.
Díky všem :)
Editoval blacksun (17. 4. 2009 12:01)
před 10 lety
- David Grudl
- Nette Core | 6806
Jako klauzuje musí být samotné where
, takže něco jako
->where()->exists() nebo tak něco.
před 10 lety
- blacksun
- Člen | 181
Super, děkuji, funguje.