@@ -7856,8 +7856,8 @@ public function find(string $collection, array $queries = [], string $forPermiss
78567856 }
78577857
78587858 /**
7859- * Call callback for each document of the given collection
7860- * that matches the given queries
7859+ * Helper method to iterate documents in collection using callback pattern
7860+ * Alterative is
78617861 *
78627862 * @param string $collection
78637863 * @param callable $callback
@@ -7867,6 +7867,23 @@ public function find(string $collection, array $queries = [], string $forPermiss
78677867 * @throws \Utopia\Database\Exception
78687868 */
78697869 public function foreach (string $ collection , callable $ callback , array $ queries = [], string $ forPermission = Database::PERMISSION_READ ): void
7870+ {
7871+ foreach ($ this ->iterate ($ collection , $ queries , $ forPermission ) as $ document ) {
7872+ $ callback ($ document );
7873+ }
7874+ }
7875+
7876+ /**
7877+ * Return each document of the given collection
7878+ * that matches the given queries
7879+ *
7880+ * @param string $collection
7881+ * @param array<Query> $queries
7882+ * @param string $forPermission
7883+ * @return \Generator
7884+ * @throws \Utopia\Database\Exception
7885+ */
7886+ public function iterate (string $ collection , array $ queries = [], string $ forPermission = Database::PERMISSION_READ ): \Generator
78707887 {
78717888 $ grouped = Query::groupByType ($ queries );
78727889 $ limitExists = $ grouped ['limit ' ] !== null ;
@@ -7906,9 +7923,7 @@ public function foreach(string $collection, callable $callback, array $queries =
79067923 $ sum = count ($ results );
79077924
79087925 foreach ($ results as $ document ) {
7909- if (is_callable ($ callback )) {
7910- $ callback ($ document );
7911- }
7926+ yield $ document ;
79127927 }
79137928
79147929 $ latestDocument = $ results [array_key_last ($ results )];
0 commit comments