嗨,这里有我的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;
}
并确保表格中有多行。
答案 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 =>值数组,以供此特定用途。