Я пытаюсь выполнить запрос, используя propel, и он должен вернуть 50 строк данных, но вместо этого он возвращает другое случайное число строк. Я напечатал запрос, скопированный в моем pgphpadmin, и он возвращает 50 строк. Я не уверен, что происходит. Также, если я выполняю функцию «count» до «find», она возвращает 50, но после этого возвращает случайное количество строк.Propel не возвращает все строки
$limit = 50;
$offset = 0;
..... //filters
$companies = $companies->orderById()->limit($limit)->offset($offset);
var_dump($companies->count()); // this returns 50
$companies = $companies->find();
var_dump($companies->count()); // this returns 13
Кроме того, foreach после итераций только 13 раз.
И это запрос генерируется
SELECT "company"."id", "company"."otherfields",
"lists"."id", "lists"."otherfields", "place"."id",
"place"."otherfields", "contact"."id", "contact"."otherfields",
"entry"."id","entry"."otherfields"
FROM "company" LEFT JOIN "lists" ON
("company"."sector_id"="lists"."id") LEFT JOIN "place" ON
("company"."country_id"="place"."id") LEFT JOIN "contact" ON
("company"."id"="contact"."company_id" AND "contact"."active" = true)
LEFT JOIN "entry" ON ("company"."id"="entry"."company_id")
WHERE "company"."active"=true ORDER BY "company"."id" ASC LIMIT 50 OFFSET 0
Версия Propel является 2,0-DEV
У меня всегда была проблема с этим запросом, поэтому я думаю, что проблема может исходить из того, что я удалил один throw в библиотеке. Я использую с() и limit(). Созданный запрос одобрен, но результата нет.
Изменено Propel/Runtime/Formatter/ObjectFormatter.php Я прокомментировал это.
/*if ($this->hasLimit) {
throw new LogicException('Cannot use limit() in conjunction with with() on a one-to-many relationship. Please remove the with() call, or the limit() call.');
}*/
Я предполагаю, что ошибка может произойти отсюда.
Мой присоединиться запрос выглядит следующим образом
$companies->leftJoinWithLists()->leftJoinWithPlace()->leftJoinWithContact()->addJoinCondition('Contact','Contact.active = ?', true)->leftJoinWithEntry();
А потом добавляю предел. Любой способ избежать этого или сделать это по-другому?