Я использую метод 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()
(по-видимому) решают проблему, какой из них более подходит?
reset
, если только вы не обновляете/вставляете события. В этом случае вам лучше использовать методfind()
. См. этот связанный ответ. - person xfra35   schedule 06.02.2017load
не перемещает курсор на первую сопоставленную запись... - person Paolo   schedule 06.02.2017