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

Posted

技术标签:

【中文标题】Kohana ORM count_all() 工作但 find_all() 不是【英文标题】:Kohana ORM count_all() working but find_all() is not 【发布时间】:2010-11-09 16:08:55 【问题描述】:

我遇到了一个问题,我正在根据 $_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->loaded 是假的。如果我用 count_all() 更改 find_all(),我会得到准确的计数。

使用 $_POST 中的示例数据,我在 $records->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()。 我不明白为什么会这样。任何见解都会有所帮助。谢谢。

【问题讨论】:

【参考方案1】:

在你的最后一行你应该有

$records = $records->find_all();

而不是

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

【讨论】:

这非常有效。谢谢你。我正在为此拉头发。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

$results-&gt;count() ;)

以上是关于Kohana ORM count_all() 工作但 find_all() 不是的主要内容,如果未能解决你的问题,请参考以下文章

Kohana 3 - 获取 orm 验证错误

Kohana ORM - 我该怎么做?

Kohana 2 ORM 自定义主键生成错误

Kohana v3 ORM 基于不同表的 Select 和 Where 子句

Kohana 3.1 都有哪些可用的 ORM 解决方案?

Kohana:授权 ORM