在foreach中使用kohana orm find_all()的奇怪行为

时间:2013-11-25 21:10:24

标签: php mysql orm foreach kohana

我有点恼火,为什么第二个代码抛出异常而第一个代码却没有。 self :: ID_FALLBACK是1, 部分中有2个或更多行,ID为1,2 ......;全部使用Sectiongroup_id = 1

Sectiongroup中有一行ID为

这没有任何问题:

public static function getSections(){
    // select groups with sections
    foreach(ORM::factory('Sectiongroup')->find_all() as $grp){
        $s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
        count($s) && $sections[$grp->name] = $s;
    }
    return $sections;
}

下一次抛出: 第Cannot use object of type Model_Sectiongroup as array行中的count($s) && $section..

public static function getSections(){
    // select groups with sections
    $sections = ORM::factory('Sectiongroup');
    foreach($sections->find_all() as $grp){
        $s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
        count($s) && $sections[$grp->name] = $s;
    }
    return $sections;
}

与Sectiongroup中的2行相同的错误现在应该是一个数组:

public static function getSections(){
    // select userdefined groups with sections
    $sections = ORM::factory('Sectiongroup');
    foreach($sections->find_all()->as_array() as $grp){
        $s = $grp->sections->where('id', '>', self::ID_FALLBACK)->find_all()->as_array('id', 'name');
        count($s) && $sections[$grp->name] = $s;
    }
    return $sections;
}

对于一个奇怪的行为是什么?

1 个答案:

答案 0 :(得分:1)

在您的第一个(工作)示例中,您从未明确定义$sections数组,当您第一次编写$sections[$grp->name] = $s时,PHP会创建$sections 数组对你而言。

在最后两个示例中,您明确地将$sections声明为ORM::factory()的返回值,更具体地说,是ORM的对象子类,您不能使用该子类的数组下标({ {1}})符号。