无法从datamapper orm查询创建数组以填充form_dropdown

时间:2011-11-01 20:43:11

标签: php codeigniter datamapper

嗨,这里有我的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);
    }

当我在视图中将$ states传递给form_dropdown帮助函数时,我收到错误“为foreach()提供的参数无效”。

所以我在状态上做了一个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 :(得分:0)

也许试试:

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

而不是:

foreach($states as $state)

不要忘记$states是一个对象。

答案 1 :(得分:0)

这是模型上的函数..返回id为

的数组
    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

答案 2 :(得分:0)

Datamapper实现了IteratorAggregate,它允许您像对待数组一样迭代对象。你的两个例子都是有效的。

至于原始问题,我没有看到任何理由不起作用,虽然我更愿意使用$ this而不是创建一个新对象,因为你已经在Usstate对象中。

即使get()没有产生任何结果,你也应该能够在foreach()中使用该对象,就像迭代一个空数组一样。

你有var_dump()'$ states变量来查看它在foreach之前包含的内容吗?

答案 3 :(得分:0)

忘记提及:Array扩展包含一个方法,允许您将查询结果转换为单个key =>值数组,以供此特定用途。