From a1f4193d6e561f4c9ac216d6f1bc319ea7d10dd2 Mon Sep 17 00:00:00 2001 From: nguyenanhung Date: Wed, 1 May 2024 01:55:54 +0700 Subject: [PATCH] Release version 4.0.4 --- src/Model/BaseModel.php | 54 +++++++++++++++++++++++++++++++++++++++++ src/Model/Helper.php | 15 ++++++++++++ 2 files changed, 69 insertions(+) diff --git a/src/Model/BaseModel.php b/src/Model/BaseModel.php index a19b82a..620fc91 100644 --- a/src/Model/BaseModel.php +++ b/src/Model/BaseModel.php @@ -987,6 +987,31 @@ public function getDistinctResult($select = array('*')): Collection return $db->get($select); } + /** + * Function getDistinctResultUniqueColumn - Hàm lấy danh sách Distinct toàn bộ bản ghi trong 1 bảng theo 1 cột unique bất kì + * + * @param string|array $select Mảng dữ liệu danh sách các field cần so sánh + * @param string $uniqueColumn Cột dữ liệu cần đối chiếu và lấy kết quả duy nhất + * User: 713uk13m + * Copyright: 713uk13m + * @return Collection + */ + public function getDistinctResultUniqueColumn($select = array('*'), string $uniqueColumn = '*'): Collection + { + $select = $this->prepareFormatSelectField($select); + $this->connection(); + $db = DB::table($this->table); + $db = $this->prepareJoinStatement($db); + $db->distinct(); + $this->logger->debug(__FUNCTION__, 'SQL Queries: ' . $db->toSql()); + $result = $db->get($select); + //$this->logger->debug(__FUNCTION__, 'Result from DB => ' . json_encode($result)); + if ( ! empty($uniqueColumn) && $uniqueColumn !== '*') { + return $this->bindUniqueColumn($result, $uniqueColumn); + } + return $result; + } + /** * Hàm lấy danh sách Distinct toàn bộ bản ghi theo điều kiện * @@ -1011,6 +1036,35 @@ public function getDistinctResultByColumn($select = '*', $wheres = array()): Col return $query->get($select); } + /** + * Function getDistinctResultByColumnUnique - Hàm lấy danh sách Distinct toàn bộ bản ghi theo điều kiện và theo 1 cột unique bất kì + * + * @param string|array $select Danh sách các cột dữ liệu cần lấy ra + * @param array|string $wheres Điều kiện kiểm tra đầu vào của dữ liệu + * @param string $uniqueColumn Cột dữ liệu cần đối chiếu và lấy kết quả duy nhất + * User: 713uk13m + * Copyright: 713uk13m + * @return Collection + */ + public function getDistinctResultByColumnUnique( + $select = '*', + $wheres = array(), + string $uniqueColumn = '*' + ): Collection { + $this->connection(); + $db = DB::table($this->table); + $db = $this->prepareJoinStatement($db); + $query = $this->prepareWhereAndFieldStatement($db, $wheres, $select); + $query->distinct(); + $this->logger->debug(__FUNCTION__, 'SQL Queries: ' . $query->toSql()); + $result = $query->get($select); + //$this->logger->debug(__FUNCTION__, 'Result from DB => ' . json_encode($result)); + if ( ! empty($uniqueColumn) && $uniqueColumn !== '*') { + return $this->bindUniqueColumn($result, $uniqueColumn); + } + return $result; + } + /** * Hàm getResultDistinct là alias của hàm getDistinctResult * diff --git a/src/Model/Helper.php b/src/Model/Helper.php index a11a6c3..29f35f3 100644 --- a/src/Model/Helper.php +++ b/src/Model/Helper.php @@ -11,6 +11,7 @@ namespace nguyenanhung\MyDatabase\Model; use Illuminate\Database\Query\Builder; +use Illuminate\Support\Collection; /** * Trait Helper @@ -822,4 +823,18 @@ public function filterRecordIsActive(Builder $db, string $field = 'status', $tab return $db; } + + /** + * Function bindUniqueColumn + * + * @param Collection $result + * @param string $column + * User: 713uk13m + * Copyright: 713uk13m + * @return Collection + */ + public function bindUniqueColumn(Collection $result, string $column): Collection + { + return collect($result)->unique($column); + } }