Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Zend_Db_Select where
Forum PHP.pl > Forum > PHP > Frameworki
nospor
Chce uzyskac zapytanie (przykład z manuala):
  1. <?php
  2. //   SELECT product_id, product_name, price
  3. //   FROM "products"
  4. //   WHERE (price < 100.00 OR price > 500.00)
  5. //     AND (product_name = 'Apple')
  6.  
  7. $minimumPrice = 100;
  8. $maximumPrice = 500;
  9. $prod = 'Apple';
  10.  
  11. $select = $db->select()
  12.             ->from('products',
  13.                    array('product_id', 'product_name', 'price'))
  14.             ->where("price < $minimumPrice OR price > $maximumPrice")
  15.             ->where('product_name = ?', $prod);
  16. ?>

zastosowali: ->where("price < $minimumPrice OR price > $maximumPrice")
Chcialbym jednak uzyc bindowania i zrobic tak
  1. <?php
  2. ->where("price < ? OR price > ?", $minimumPrice, $maximumPrice);
  3. ?>

Oczywiscie to nie zadziala, bo where() przyjmuje tylko jedą wartosc do bindowania. W kodzie ani w dokumentacji nie znalazlem tego, a nie chce mi sie wierzyc by nie pomysleli o tym przy where()... Zapodanie tablicy wartosci tez nie dziala.
ziqzaq
Cytat
If you need to combine terms together using OR, use the orWhere() method. This method is used in the same way as the where() method, except that the term specified is preceded by OR, instead of AND.

Edit: źródło
nospor
a przeczytaj jeszcze raz przyklad z pierwszego posta i porownaj z tym co robi orWhere winksmiley.jpg

ps: moj przyklad jest pod tym co ty mi zacytowales winksmiley.jpg
ziqzaq
Mea kulpa smile.gif
wolditm
  1. <?php
  2. $select = $db->select()
  3.            ->from('products', array('product_id', 'product_name', 'price'))
  4.            ->where("price < :minimumPrice OR price > :maximumPrice", array('minimumPrice' => $minimumPrice, 'maximumPrice' => $maximumPrice))
  5.            ->where('product_name = ?', $prod);
  6. ?>


?
nospor
rozumiem ze to zwykły strzał? oczywiscie nie działa

" Invalid parameter number: no parameters were bound "
konys
Cytat
nie chce mi sie wierzyc by nie pomysleli o tym przy where()...

Tak na szybko przejrzalem kod i wychodzi, ze Zend_Db_Select::where wywoluje Zend_Db_Select::_where gdzie umieszczony zostal warunek:
Kod
        if ($value !== null) {
            $condition = $this->_adapter->quoteInto($condition, $value, $type);
        }

Z kolei Zend_Db_Adapter_Abstract::quoteInto($text, $value, $type, $count) ma parametr $count
Cytat
@param integer $count OPTIONAL count of placeholders to replace

Z tego co rozumiem, gdyby w _where umiescic cos podobnego do:
Kod
        if ($value !== null) {
            $count = is_array($value) ? count($value) : null;
            $condition = $this->_adapter->quoteInto($condition, $value, $type, $count);
        }

to mialoby szanse zadzialac. Tylko taki strzal smile.gif
nospor
Hehe, no tak, ale nie będę przecież modyfikował im frameworka. Przyjdzie nowa wersja i bede musial pamietac ze jakies zmiany robilem i ja nanosic na nową wersje
bigZbig
Zawsze możesz spróbować czerpiąc z przykładu http://zendframework.com/manual/en/zend.db...tement.creating

a konkretnie

  1. <?php
  2. $select = $db->select()
  3.           ->from('products', array('product_id', 'product_name', 'price'))
  4.           ->where("price < :minimumPrice OR price > :maximumPrice")
  5.           ->where('product_name = :prodName');
  6. $stmt = new Zend_Db_Statement_Mysqli($db, (string) $select);
  7. $stmt->execute(array(':minimumPrice' => $minimumPrice, ':maximumPrice' => $maximumPrice, ':prodName' => $prod));
  8. $stmt->fetchAll();
  9. ?>


Pisałem na sucho więc nie wiem czy zadziała
nospor
Jest to jakaś myśl.
Niestety uzywam tego $select do Zend_Paginator i coś czuję ze podane przez Ciebie rozwiązanie będzie się z tym gryzło.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.