diff --git a/app/Classes/General/Eloquent/AbstractGetRecord.php b/app/Classes/General/Eloquent/AbstractGetRecord.php index f927d818..e2972eb0 100644 --- a/app/Classes/General/Eloquent/AbstractGetRecord.php +++ b/app/Classes/General/Eloquent/AbstractGetRecord.php @@ -12,6 +12,8 @@ abstract class AbstractGetRecord /** @var array */ private const DECORATION_FILTERS = ['per_page', 'order_by']; + private const JOIN_FILTERS = ['joins']; + /** @var Collection */ private $filters; @@ -20,7 +22,7 @@ abstract class AbstractGetRecord * @return Collection */ private function getQueryFilters(){ - return $this->filters->except(self::DECORATION_FILTERS); + return $this->filters->except(array_merge(self::DECORATION_FILTERS, self::JOIN_FILTERS)); } /** @@ -30,6 +32,10 @@ abstract class AbstractGetRecord return $this->filters->only(self::DECORATION_FILTERS); } + public function getJoinFilters(){ + return $this->filters->only(self::JOIN_FILTERS); + } + /** * @param null|string $json * @return array @@ -43,7 +49,13 @@ abstract class AbstractGetRecord */ private function applyFiltersToQuery(): Builder { - return (new ApplyFiltersToQuery())->execute($this->getRepository(), $this->getQueryFilters()->toArray()); + $table = $this->getRepository()->getModel()->getTable(); + $a = $this->getQueryFilters()->toArray(); + $r=[]; + + array_walk($a, function ($v, $k) use ($table, &$r) { $r[$table.".".$k]=$v; }); + + return (new ApplyFiltersToQuery())->execute($this->getRepository(), $r); } /** @@ -67,4 +79,4 @@ abstract class AbstractGetRecord */ abstract function getResults(Builder $query); -} \ No newline at end of file +} diff --git a/app/Classes/General/Eloquent/AbstractListRecord.php b/app/Classes/General/Eloquent/AbstractListRecord.php index c5d2e6e6..830dad3c 100644 --- a/app/Classes/General/Eloquent/AbstractListRecord.php +++ b/app/Classes/General/Eloquent/AbstractListRecord.php @@ -6,6 +6,7 @@ namespace App\Classes\General\Eloquent; use App\Classes\Exceptions\MalformedRequestException; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\QueryException; +use Illuminate\Support\Facades\Schema; abstract class AbstractListRecord extends AbstractGetRecord { @@ -33,14 +34,40 @@ abstract class AbstractListRecord extends AbstractGetRecord * @return mixed */ public function getResults(Builder $query) { + + $filters = $this->getJoinFilters(); + $table = $query->getModel()->getTable(); + $selects = []; + + $selects[] = $table.".*,"; + + if($filters->has('joins')){ + + foreach($filters->get('joins') as $join){ + $join_table = $join->table; + $columns = Schema::getColumnListing($join_table); + + $r=[]; + array_walk($columns, function ($v, $k) use ($join_table, &$r) { $r[] = $join_table.".".$v." ".$join_table."_".$v; }); + $selects[] = implode(",",$r); + + $query = $query->join($join->table, function($q) use($join, $query) { + $q->on($query->getModel()->getTable().'.id', '=', $join->table.'.owner_id'); + }); + }; + + $query = $query->selectRaw(implode("",$selects)); + } + $filters = $this->getDecorationFilters(); if($filters->has('order_by')){ - $query = $query->orderBy($filters->get('order_by')->column, $filters->get('order_by')->DESC ? 'DESC': 'ASC'); + $orderByTable = (strpos($filters->get('order_by')->column,".")===false) ? $query->getModel()->getTable()."." : ""; + $query = $query->orderBy($orderByTable.$filters->get('order_by')->column, $filters->get('order_by')->DESC ? 'DESC': 'ASC'); } return $filters->has('per_page') ? $query->paginate($filters->get('per_page')) : $query->get(); } -} \ No newline at end of file +} diff --git a/resources/assets/vue/components/orders/elements/ParcelComponent.vue b/resources/assets/vue/components/orders/elements/ParcelComponent.vue index 17e29d63..44303afb 100644 --- a/resources/assets/vue/components/orders/elements/ParcelComponent.vue +++ b/resources/assets/vue/components/orders/elements/ParcelComponent.vue @@ -93,4 +93,4 @@ }, mixins: [componentHandler] } - \ No newline at end of file + diff --git a/resources/views/pages/warehouse_list.blade.php b/resources/views/pages/warehouse_list.blade.php index a57fc834..6f6ad64f 100644 --- a/resources/views/pages/warehouse_list.blade.php +++ b/resources/views/pages/warehouse_list.blade.php @@ -2,11 +2,11 @@ @section('inner_content')
- +
-@endsection \ No newline at end of file +@endsection