Jak pobrac dane z bazy do tablicy - multiselect - Zend Framework 1.12

0

Witam, chciałbym stworzyć filtr użytkowników po adresie zamieszkania i adresie wysyłki. Obie te wartości znajdują się w bazie contact.
Odpowiednio contact_id billing_city shipping_city. Miasta sie powtarzaja, wiec trze uzyc distinct.

Kombinuje w modelu coś takiego:
Core_Model_Contact

    public function getDistinctCities() {
        $table = $this->getTable();
        $select = $table->select()->setIntegrityCheck(false);

        $select->distinct()
	          ->from(array('c' => 'contact'), array('c.billing_city'=>'city'))
	          ->where('c.deleted != 1');

        $result = $table->fetchAll($select)->toArray();
        return $result;        
    }

W formie cos takiego:
Core_Form_Contact_Search

        $city = new Zend_Form_Element_Multiselect('city');
        $cityModel = new Core_Model_Contact();
	$city->setMultiOptions($cityModel->getMultiOptions('contact_id', 'billing_city'));
        $city->setLabel('City');

Porzebuje, zeby do url'a wchodzilo &city%5B%5D=nazwamiasta, czyli w tablicy musi byc np 'Łódź' => 'Łódź'.

0
  $city = new Zend_Form_Element_Multiselect('city');
        $cityModel = new Core_Model_Contact();
		$city->setMultiOptions(array(
		    'Łódź' => 'Łódź',
		    'Warszawa' => 'Warszawa',
		    'Kraków' => 'Kraków'
		));
        $city->setLabel('City');

Dokladniej chodzi mi o coś takiego, gdyz takie opcje wpisane z palca dzialaja.

0

Podejrzewam, że musisz to rozbić na dwa selekty, bo inaczej dostaniesz powtarzające się wartości w wypadku gdy:
billing_city = Warszawa - shipping_city = ' '
billing_city = Warszawa - shipping_city = 'Szczecin' itd.

Zwróć uwagę gdzie korzystamy z distinct'a.

    /*
     * Fetch contact's billing and shipping cities
     * @return object list contacts
     */
    public function getDistinctCities() {
        $table = $this->getTable();
        $shipping_city = $table->select()->setIntegrityCheck(false);
        $billing_city = $table->select()->setIntegrityCheck(false);

        $shipping_city->from(array('c' => 'contact'),
                             array( 'city'=>'distinct(shipping_city)'))
			          ->where("shipping_city != ''")
			          ->where('c.deleted != 1');
       
        $billing_city->from(array('c' => 'contact'),
                      		array('city' => 'distinct(billing_city)'))
		             ->where("billing_city != ''")		 
		             ->where('c.deleted != 1');

        $shipping_city = $table->fetchAll($shipping_city)->toArray();
        $billing_city  = $table->fetchAll($billing_city)->toArray();

        /* Teraz dodajemy to wszystko do jednej tablicy */

	$result = array();
    	foreach($shipping_city as $row){
    		$result[$row['city']] = $row['city'];
    	}
    	foreach($billing_city as $row){
    		$result[$row['city']] = $row['city'];
    	}
        return $result;        
    }

Twoja funkcja zwraca:

array (size=3)
  'Warszawa' => string 'Warszawa' (length=8)
  'Łódź' => string 'Łódź' (length=7)
  'Kraków' => string 'Kraków' (length=7)

Teraz w formie zmien na cos takiego:

        $city = new Zend_Form_Element_Multiselect('city');
        $city->setLabel('City');

        $cityModel = new Core_Model_Contact();
        $cities = $cityModel->getDistinctCities();
        $city->addMultiOptions($cities); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1