From 6e8c7b0af1fa6ceb2b17739ec1c4cf737d44aaf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mr=C2=B7x?= Date: Tue, 8 Sep 2020 01:27:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Database/Collection.php | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Database/Collection.php b/Database/Collection.php index accdc3ba..54012082 100644 --- a/Database/Collection.php +++ b/Database/Collection.php @@ -192,17 +192,12 @@ class Collection extends AbstractCollection */ public function filter(array $condition) { + $_filters = []; if (empty($condition)) { return $this; } - $_filters = []; foreach ($this as $value) { - $_value = $value; - if ($_value instanceof ActiveRecord) { - $_value = $_value->toArray(); - } - $_tmp = array_intersect_key($_value, $condition); - if (count(array_diff_assoc($_tmp, $condition)) > 0) { + if (!$this->filterCheck($value, $condition)) { continue; } $_filters[] = $value; @@ -210,6 +205,27 @@ class Collection extends AbstractCollection return new Collection($this->query, $_filters, $this->model); } + + /** + * @param $value + * @param $condition + * @return bool + * @throws Exception + */ + private function filterCheck($value, $condition) + { + $_value = $value; + if ($_value instanceof ActiveRecord) { + $_value = $_value->toArray(); + } + $_tmp = array_intersect_key($_value, $condition); + if (count(array_diff_assoc($_tmp, $condition)) > 0) { + return false; + } + return true; + } + + /** * @param $key * @param $value