Improvements for eager loading (#3290)

* Working on invoice designs

* Working on Invoice Designs

* Improve eager loads

* Improvements for eager loading
This commit is contained in:
David Bomba 2020-02-06 23:00:22 +11:00 committed by GitHub
parent 4f82f1b903
commit f519fc765b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 79 additions and 62 deletions

View File

@ -67,53 +67,14 @@ class BaseController extends Controller
{
$include = '';
if (request()->has('first_load') && request()->input('first_load') == 'true') {
if(request()->has('first_load') && request()->input('first_load') == 'true') {
$include = $this->getRequestIncludes([]);
/* For very large accounts, we reduce the includes automatically */
if (auth()->user()->getCompany()->clients->count() < 1000) {
$include = [
'account',
'user.company_user',
'token',
'company.activities',
'company.users.company_user',
'company.tax_rates',
'company.groups',
'company.company_gateways.gateway',
'company.clients',
'company.products',
'company.invoices',
//'company.payments',
'company.payments.paymentables',
'company.quotes',
'company.vendors',
'company.expenses',
'company.tasks',
'company.projects',
];
} else {
$include = [
'account',
'user.company_user',
'token',
'company.activities',
'company.users.company_user',
'company.tax_rates',
'company.groups',
// 'company.company_gateways.gateway',
// 'company.clients',
// 'company.products',
// 'company.invoices',
// 'company.payments',
// 'company.payments.paymentables',
// 'company.quotes',
];
}
$include = array_merge($this->forced_includes, $include);
$include = array_merge($this->forced_includes, $include);
$include = implode(",", $include);
} elseif (request()->input('include') !== null) {
$include = implode(",", $include);
}
else if (request()->input('include') !== null) {
$request_include = explode(",", request()->input('include'));
$include = array_merge($this->forced_includes, $request_include);
@ -124,7 +85,7 @@ class BaseController extends Controller
}
$this->manager->parseIncludes($include);
$this->serializer = request()->input('serializer') ?: EntityTransformer::API_SERIALIZER_ARRAY;
if ($this->serializer === EntityTransformer::API_SERIALIZER_JSON) {
@ -284,19 +245,74 @@ class BaseController extends Controller
];
}
protected function getRequestIncludes($data)
{
$included = request()->input('include');
$included = explode(',', $included);
foreach ($included as $include) {
if ($include == 'clients') {
$data[] = 'clients.contacts';
} elseif ($include) {
$data[] = $include;
}
$first_load = [
'account',
'user.company_user',
'token',
'company.activities',
'company.users.company_user',
'company.tax_rates',
'company.groups',
'company.company_gateways.gateway',
'company.clients.contacts',
'company.products',
'company.invoices',
'company.payments.paymentables',
'company.quotes',
'company.vendors.contacts',
'company.expenses',
'company.tasks',
'company.projects',
];
$mini_load = [
'account',
'user.company_user',
'token',
'company.activities',
'company.users.company_user',
'company.tax_rates',
'company.groups',
];
if (request()->has('first_load') && request()->input('first_load') == 'true')
{
if (auth()->user()->getCompany()->clients->count() > 1000)
{
$data = $mini_load;
}
else
{
$data = $first_load;
}
}
else
{
$included = request()->input('include');
$included = explode(',', $included);
foreach ($included as $include) {
if ($include == 'clients') {
$data[] = 'clients.contacts';
} elseif ($include) {
$data[] = $include;
}
}
}
return $data;
}
}

View File

@ -49,8 +49,9 @@ class QueryLogging
$time = $timeEnd - $timeStart;
Log::info($request->method() . ' - ' . $request->url() . ": $count queries - " . $time);
if($count > 50)
Log::info($queries);
// if($count > 50)
// Log::info($queries);
}
}

View File

@ -95,7 +95,7 @@ class Client extends BaseModel
//'currency',
// 'primary_contact',
// 'country',
'contacts',
// 'contacts',
// 'shipping_country',
// 'company',
];

View File

@ -54,7 +54,7 @@ class Vendor extends BaseModel
];
protected $with = [
'contacts',
// 'contacts',
];
public function documents()

View File

@ -113,7 +113,7 @@ class ClientTransformer extends EntityTransformer
'id_number' => $client->id_number ?: '',
'updated_at' => (int)$client->updated_at,
'archived_at' => (int)$client->deleted_at,
'display_name' => $client->present()->name()
//'display_name' => $client->present()->name()
];
}
}

View File

@ -28,9 +28,9 @@ class PaymentTransformer extends EntityTransformer
protected $defaultIncludes = [];
protected $availableIncludes = [
'client',
'invoices',
'paymentables'
'client',
'invoices',
'paymentables'
];
public function __construct($serializer = null)