Kohana ORM count_all()工作但find_all()不工作

时间:2010-11-09 16:08:56

标签: orm kohana

我遇到了一个问题,我正在根据$ _POST中的几个条件构建ORM查询。最终查询看起来很好,并在直接SQL查询(phpmyadmin)中返回记录,但在我的应用程序中不返回任何记录。这是代码......

        $records = ORM::factory('record')->where(array('date >='=>$_POST['fromdate'],'date <='=>$_POST['todate']));
        if ($_POST['agent'] != '0') $records->where(array('ccp_id'=>$_POST['agent']));
        if ($_POST['supervisor'] != '0') {
            $ccps = ORM::factory('employee')->where(array('supervisor_id'=>$_POST['supervisor'],'active'=>'1'))->find_all();
            foreach ($ccps as $ccp) {
                $agents[] = $ccp->id;
            }
            // echo kohana::debug($agents);
            $records->in('ccp_id',$agents);
        }
        if ($_POST['lead'] != '0') $records->where(array('lead_id'=>$_POST['lead']));
        if ($_POST['reasons'] != '[]') {
            $reasons = explode(',',str_replace(array('[',']','"'),'',$_POST['reasons']));
            $records->in('reason_id',$reasons);
        }
        $records->find_all();

$ records-&gt;已加载为false。如果我用count_all()更改find​​_all(),我会得到一个准确的计数。

使用$ _POST中的示例数据我在$ records-&gt; last_query()

中有此查询
SELECT `records`.*
FROM (`records`)
WHERE `date` >= '2010-10-10'
AND `date` <= '2010-11-09'
AND `ccp_id` IN ('E128092','E128093','E124874','E124414','E129056','E137678','E078952','E112701','E084457','E098047','E099221','E001131','E120892')
AND `lead_id` = 'E110873'
AND `reason_id` IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24)
ORDER BY `records`.`id` ASC

这将在phpmyadmin中返回4条记录,在(4)中返回count_all()。 我不明白为什么会这样。任何见解都会有所帮助。谢谢。

3 个答案:

答案 0 :(得分:2)

在你的最后一行你应该

$records = $records->find_all();

而不是

// this actually returns you the resultset and resets the query builder object
$records->find_all() 

答案 1 :(得分:0)

$recordsDatabase_Result,没有loaded属性。使用count($records)或使用foreach语句对其进行迭代以获取ORM对象。

答案 2 :(得分:0)

请注意:如果您希望使用$记录,最好不要删除ORM对象($ results = $ records-&gt; find_all()而不是$ records = $ records-&gt; find_all()) - 稍后在代码中使用&gt; count_all()或其他调用。只是我遇到的一个问题。