не может создать массив из запроса orma datamapper для заполнения form_dropdown - PullRequest
0 голосов
/ 02 ноября 2011

Привет, вот моя модель datamapper

function getall()
    {
        $states = new Usstate();
        $states->get();
        $usstates_array = array();
        foreach ($states as $state) 
        {
           $usstates_array[$state->abbreviation] = $state->state;
        } 
         return $usstates_array;
    }

А вот мой контроллер

function getall()
    {
        $s = new Usstate();
        $data['states'] = $s->getall();
        $this->parser->parse('register', $data);
    }

Когда я передаю $, я получаю сообщение об ошибке "Недопустимый аргумент для foreach ()"состояния в вспомогательную функцию form_dropdown, на мой взгляд.

поэтому я сделал print_r для состояний, и он был совершенно пуст.

Пожалуйста, помогите

Обновление:

Хорошо, янаконец-то все заработало, я не уверен насчет объяснения, но это то, что я сделал.

моя модель datamapper

function getall()
    {
        $states = new Usstate();
        $statecollection = $states->get();
        $usstates_array = array();
        foreach ($statecollection as $state) 
        {
           $usstates_array[$state->abbreviation] = $state->state;
        } 
         return $usstates_array;
    }

, а также убедитесь, что у вас более одной строки вваш стол.

Ответы [ 4 ]

0 голосов
/ 11 ноября 2011

Забыл упомянуть: расширение Array содержит метод, который позволяет преобразовать результат запроса в один массив ключ => значение для этого конкретного использования.

0 голосов
/ 02 ноября 2011

это функция вашей модели .. чтобы вернуть массив с идентификатором

    public function getall() {
            // id and the colum you want to show in your form_dropdown
            $this->select('id, name')->get(); 

            $ids = array();
            $names = array();

            foreach ($this as $rows) {
                $ids[] = $rows->id;
                $names[] = $rows->name;
            }        

            return array_combine($ids, $names);
        }

... надеюсь, вам понравится: D

0 голосов
/ 02 ноября 2011

Datamapper реализует IteratorAggregate, который позволяет вам перебирать объект так же, как массив.Оба ваших примера верны.

Что касается исходного вопроса, я не вижу причин, по которым это не сработает, хотя я бы предпочел работать с $ this вместо создания нового объекта, как выуже в объекте Usstate.

Даже если get () не дает никаких результатов, вы должны иметь возможность использовать объект в foreach (), это все равно, что перебирать пустой массив.

Была ли у вас var_dump () переменная $ states, чтобы увидеть, что она содержит перед foreach?

0 голосов
/ 02 ноября 2011

Возможно, попробуйте:

foreach($states->get() as $state)

Вместо:

foreach($states as $state)

Не забывайте, что $states - это объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...