mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/portal.git
synced 2026-08-21 13:34:08 +00:00
Merge branch 'task/EXC-324' into 'master'
Join table from frontend See merge request CIEFWorldwideSdnBhd/shipping-portal!53
This commit is contained in:
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,4 +93,4 @@
|
||||
},
|
||||
mixins: [componentHandler]
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
@section('inner_content')
|
||||
<div class="row">
|
||||
<div class="col-7">
|
||||
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{type: 1, status: 2, per_page: 20, order_by: {column: 'created_at', DESC: true}}">
|
||||
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{type: 1, status: 2, per_page: 20, order_by: {column: 'transport_arrangements.drop_date', DESC: true}, joins: [{table: 'transport_arrangements'}]}">
|
||||
<template slot="list" slot-scope="{data}">
|
||||
<parcel-component v-for="packages in data.packages" :data="packages" :key="packages.id"></parcel-component>
|
||||
</template>
|
||||
</list-component>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
@endsection
|
||||
|
||||
Reference in New Issue
Block a user