Kohana ORM count_all () работает, но find_all () не работает - PullRequest
1 голос
/ 09 ноября 2010

У меня проблема с созданием запроса ORM на основе нескольких условий из $ _POST. Последний запрос выглядит нормально и возвращает записи в прямом запросе 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-> загружено неверно. Если я изменю find_all () на count_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

это возвращает 4 записи в phpmyadmin и (4) для count_all (). Я не понимаю, почему это происходит. Любые идеи будут полезны. Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 ноября 2010

В вашей последней строке вы должны иметь

$records = $records->find_all();

вместо

// this actually returns you the resultset and resets the query builder object
$records->find_all() 
0 голосов
/ 14 апреля 2011

Просто примечание: вероятно, лучше не удалять объект ORM ($ results = $ records-> find_all () вместо $ records = $ records-> find_all ()), если вы хотите использовать $ records-> count_all () или другие вызовы позже в вашем коде. Просто проблема, с которой я столкнулся.

0 голосов
/ 09 ноября 2010

$records является Database_Result и не имеет свойства loaded. Используйте count($records) или итерируйте его с оператором foreach, чтобы получить объекты ORM.

...