request); unset($userRequest->userId); parent::__construct($userRequest, $tableName); } protected function gate():void{ $this->innerJoin = [ [ "tableName"=>"testTable", "joinColumns"=>["primaryColumn"=>"columnName", "secondryColumn"=>"columnName"], "columns"=>["column","column"], "filters"=>["column","column"] ] ]; $this->innerJoin = [ [ "tableName"=>"testTable", "joinColumns"=>["primaryColumn"=>"columnName", "secondryColumn"=>"columnName"], "columns"=>["column","column"] ] ]; $this->requiredColumnsDBMirror = ["transID"=>"transactionID", "transParties"=>"JSON_EXTRACT(transPaties, '$')", "transDestinationData"=>"JSON_EXTRACT(transDestinationData, '$')", "status"=>"transitStatus", "tansDate"=>"requestDate", "requestTime"=>"requestTime", "responseTime"=>"responseTime", "rerouteTime"=>"rerouteTime", "deliveryTime"=>"deliveryTime" ]; $this->filterInDBMirror = ["driverId" => "JSON_EXTRACT(transPaties, '$.driverId')", "rerouted"=>"rerouteTime"]; if (!isset($this->userRequest->status)) { $this->userRequest->status = "declined, failedPay, completed,requested,accepted"; } $this->filterInAnyOfDBMirror=["status"=>"transitStatus"]; $this->dateLimitColumn = "requestDate"; } } private function joinner(){ $joinMatches = []; $mainTableName = $this->tableName; foreach($this->joiners as $joinerKey => $joiner){ if (isset($this->{$joinerKey})) { try { foreach($this->{$joinerKey} as $joinData){ $secondaryTable = $joinData["tableName"]; $primaryColumnName = $joinData["joinColumns"]["primaryColumn"]; $secondaryColumnName= $joinData["joinColumns"]["secondryColumn"]; $primaryColumn = "$mainTableName.{$primaryColumnName}"; $secondryColumn = "$secondaryTable.{$secondaryColumnName}"; $joinMatches[] = "$joiner $secondaryTable ON $primaryColumn = $secondryColumn"; } } catch (\Throwable $th) { throw new \Exception($th->getMessage(), 400); } } } $this->joinClause = implode(" ",$joinMatches); $this->jonnerColumnsBranch(); $this->joinnerBindersBranch(); } private function jonnerColumnsBranch(){ $mainTableName = $this->tableName; foreach($this->joiners as $joinerKey => $joiner){ if (isset($this->{$joinerKey})) { try { foreach($this->{$joinerKey} as $joinData){ if (!isset($joinData["tableName"], $joinData["columns"])) { throw new \Exception("Join data must include 'tableName' and 'columns'"); } $tempRequiredColumnMirror = []; $temMainDBMirror=[]; $this->tableName = $joinData["tableName"]; $this->requiredColumns = $joinData["columns"]; foreach ($this->requiredColumnsDBMirror as $mirrorKey => $mirrorValue) { if (in_array($mirrorValue, $joinData["columns"]) ) { $tempRequiredColumnMirror[$mirrorKey] = $mirrorValue; } else { $temMainDBMirror[$mirrorKey] = $mirrorValue; } } $this->requiredColumnsDBMirror = $tempRequiredColumnMirror; $this->buildSelectStatement(); $this->joinSelectClause .= $this->selectClause; $this->requiredColumnsDBMirror = $temMainDBMirror; $this->tableName = $mainTableName; } } catch (\Throwable $th) { throw new \Exception($th->getMessage(), 400); } } } } private function joinnerBindersBranch(){ $dBmirroList = [ "filterInDBMirror", "filterOutDBMirror", "filterInAnyOfDBMirror", "filterOutAnyOfDBMirror" ]; $mainMirrorsHolder = []; $tempMirrors=[]; $mainTableName = $this->tableName; foreach ($dBmirroList as $mirror) { if(isset($this->{$mirror})){ foreach ($this->joiners as $joinerKey => $joiner) { if(isset($this->{$joinerKey})){ foreach($this->{$joinerKey} as $joinData){ if (!isset($joinData["filters"])) continue; foreach ($joinData["filters"] as $filter) { if(isset($this->{$mirror}[$filter])){ $tempMirrors[$joinData["tableName"]][$mirror][$filter] = $this->{$mirror}[$filter]; unset($this->{$mirror}[$filter]); if (empty($this->{$mirror})) { $this->{$mirror} = null; } } } } } } $mainMirrorsHolder[$mirror] = $this->{$mirror}; } } foreach ($mainMirrorsHolder as $key => $value) { unset($this->{$key}); } foreach ($this->joiners as $joinerKey => $joiner) { if(isset($this->{$joinerKey})){ foreach($this->{$joinerKey} as $joinData){ if (!isset($joinData["filters"])) continue; $mirrorName = array_keys($tempMirrors[$joinData["tableName"]]); if (empty($mirrorNames)) continue; $mirrorName = $mirrorName[0]; $this->{$mirrorName} = $tempMirrors[$joinData["tableName"]][$mirrorName]; $this->tableName = $joinData["tableName"]; $this->queryDataBuilder(); $this->joinWhereClause.= $this->whereClause; $this->JoinBanders.= $this->binders; unset($this->{$mirrorName}); } } } $mainTableName = $this->tableName; foreach ($mainMirrorsHolder as $key => $value) { $this->{$key} = $value; } } */ ?>