f3 framework: неожиданное поведение Cursor Method `load`

Я использую метод load в цикле для выполнения набора запросов, каждый из которых похож на этот:

$events->load( "`user_id` = {$users->id} AND `action` = \"view\"");

где $events — это сопоставитель, и каждая загруженная запись представляет собой «событие» (конечно) в таблице журнала.

После вызова load я перебираю найденные записи:

while( ! $events->dry() )
{
    // do something with $event

    $events->next();
}

Когда (внутренний) цикл while завершается, выполняется другая итерация основного цикла, поэтому load вызывается снова.

Этот код не обеспечивает ожидаемого поведения, так как некоторые события явно не загружены.

Я могу исправить это, поместив либо $events->reset(), либо $events->first() непосредственно перед оператором $events->load.

Однако из документации

нагрузка


Сопоставить с первой записью, соответствующей критериям

[...] Он использует find() для загрузки записей и делает первую запись (объект сопоставления), которая соответствует критериям, активной записью. Дополнительные записи, соответствующие тем же критериям, можно сделать активной записью, переместив указатель курсора

Теперь вопрос: это ошибка f3 или я что-то упускаю?

И поскольку и reset(), и first() (по-видимому) решают проблему, какой из них более подходит?


person Paolo    schedule 05.02.2017    source источник
comment
Синтаксис вашего цикла правильный. Вам не нужно вызывать reset, если только вы не обновляете/вставляете события. В этом случае вам лучше использовать метод find(). См. этот связанный ответ.   -  person xfra35    schedule 06.02.2017
comment
поэтому я предполагаю, что load не перемещает курсор на первую сопоставленную запись...   -  person Paolo    schedule 06.02.2017


Ответы (1)


Это было проблемой в более старой версии F3 (3.4).

Обновление до 3.6 решило проблему.

person Paolo    schedule 06.02.2017
comment
вы уверены, что это решение? насколько я вижу, вызовы mapper-›load сбрасываются внутренне, что должно вернуть указатель курсора на 0. Может быть, обновить ядро ​​​​f3, если вы используете более старую версию?! - person ikkez; 07.02.2017
comment
@ikkez Я ОЧЕНЬ ТУПОЙ! - Я был еще на 3.4. Обновился до 3.6 и проверил load, вы правы, reset вызывается перед выполнением поиска. Итак, проблема была, но давно исправлена. - person Paolo; 07.02.2017