From f41fc3eb9c879787b6d78ef98c3caa8c1284ac0a Mon Sep 17 00:00:00 2001 From: Deon George Date: Mon, 10 Feb 2020 22:07:46 +1100 Subject: [PATCH] Query optimisations using with() --- app/Console/Commands/ServiceList.php | 60 ++++++++++++++++++++++++++++ app/Models/Invoice.php | 7 +++- app/Models/InvoiceItem.php | 1 + app/Models/Service.php | 36 ++++++++++------- app/Models/Service/Domain.php | 2 +- app/Models/Service/Host.php | 1 - app/Models/Service/SSL.php | 1 - app/User.php | 26 +++++------- 8 files changed, 101 insertions(+), 33 deletions(-) create mode 100644 app/Console/Commands/ServiceList.php diff --git a/app/Console/Commands/ServiceList.php b/app/Console/Commands/ServiceList.php new file mode 100644 index 0000000..c61d2c1 --- /dev/null +++ b/app/Console/Commands/ServiceList.php @@ -0,0 +1,60 @@ +$query->sql,'binding'=>$query->bindings]); + }); + + foreach (Service::active()->get() as $o) { + $this->info(sprintf('|%10s|%-6s|%-20s|%-50s|%8s|%14s|%10s|', + $o->sid, + $o->product->category, + $o->product_name, + $o->name_short, + $o->active ? 'active' : 'inactive', + $o->status, + $o->invoice_next ? $o->invoice_next : NULL, + )); + } + } +} \ No newline at end of file diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php index f9dddf2..b5c6fb3 100644 --- a/app/Models/Invoice.php +++ b/app/Models/Invoice.php @@ -8,7 +8,6 @@ class Invoice extends Model { protected $table = 'ab_invoice'; protected $dates = ['date_orig','due_date']; - protected $with = ['account.country.currency','items.taxes','paymentitems']; protected $appends = [ 'date_due', @@ -25,6 +24,12 @@ class Invoice extends Model 'total', ]; + protected $with = [ + 'account.country.currency', + 'items.taxes', + 'paymentitems' + ]; + private $_total = 0; private $_total_tax = 0; diff --git a/app/Models/InvoiceItem.php b/app/Models/InvoiceItem.php index d589c1a..027f2c6 100644 --- a/app/Models/InvoiceItem.php +++ b/app/Models/InvoiceItem.php @@ -12,6 +12,7 @@ class InvoiceItem extends Model { protected $dates = ['date_start','date_stop']; public $dateFormat = 'U'; + protected $table = 'ab_invoice_item'; private $_tax = 0; diff --git a/app/Models/Service.php b/app/Models/Service.php index 0428974..79159aa 100644 --- a/app/Models/Service.php +++ b/app/Models/Service.php @@ -24,20 +24,6 @@ class Service extends Model const CREATED_AT = 'date_orig'; const UPDATED_AT = 'date_last'; - protected $dates = [ - 'date_last_invoice', - 'date_next_invoice'. - 'date_start', - 'date_end', - ]; - - public $dateFormat = 'U'; - protected $table = 'ab_service'; - - protected $casts = [ - 'order_info'=>'array', - ]; - protected $appends = [ 'account_name', 'admin_service_id_url', @@ -51,6 +37,20 @@ class Service extends Model 'status', ]; + protected $casts = [ + 'order_info'=>'array', + ]; + + protected $dates = [ + 'date_last_invoice', + 'date_next_invoice'. + 'date_start', + 'date_end', + ]; + public $dateFormat = 'U'; + + protected $table = 'ab_service'; + protected $visible = [ 'account_name', 'admin_service_id_url', @@ -67,6 +67,14 @@ class Service extends Model 'status', ]; + protected $with = [ + 'account.language', + 'charges', + 'invoice_items', + 'product', + 'type', + ]; + private $inactive_status = [ 'CANCELLED', 'ORDER-REJECTED', diff --git a/app/Models/Service/Domain.php b/app/Models/Service/Domain.php index 05d00f5..cbb5ac9 100644 --- a/app/Models/Service/Domain.php +++ b/app/Models/Service/Domain.php @@ -7,10 +7,10 @@ use App\Traits\NextKey; class Domain extends \App\Models\Base\ServiceType { use NextKey; - const RECORD_ID = 'service__domain'; protected $table = 'ab_service__domain'; + protected $with = ['tld']; public function tld() { diff --git a/app/Models/Service/Host.php b/app/Models/Service/Host.php index 2f0ada6..4426b43 100644 --- a/app/Models/Service/Host.php +++ b/app/Models/Service/Host.php @@ -7,7 +7,6 @@ use App\Traits\NextKey; class Host extends \App\Models\Base\ServiceType { use NextKey; - const RECORD_ID = 'service__hosting'; protected $table = 'ab_service__hosting'; diff --git a/app/Models/Service/SSL.php b/app/Models/Service/SSL.php index aa53b08..cbebb06 100644 --- a/app/Models/Service/SSL.php +++ b/app/Models/Service/SSL.php @@ -7,7 +7,6 @@ use App\Traits\NextKey; class SSL extends \App\Models\Base\ServiceType { use NextKey; - const RECORD_ID = 'service__ssl'; protected $table = 'ab_service__ssl'; diff --git a/app/User.php b/app/User.php index afa9b3c..23192f1 100644 --- a/app/User.php +++ b/app/User.php @@ -19,6 +19,14 @@ class User extends Authenticatable { use HasApiTokens,Notifiable,UserSwitch,HasQuickBooksToken; + protected $appends = [ + 'active_display', + 'services_count_html', + 'surfirstname', + 'switch_url', + 'user_id_url', + ]; + protected $dates = [ 'created_at', 'updated_at', @@ -44,14 +52,6 @@ class User extends Authenticatable 'remember_token', ]; - protected $appends = [ - 'active_display', - 'services_count_html', - 'surfirstname', - 'switch_url', - 'user_id_url', - ]; - protected $visible = [ 'active_display', 'id', @@ -62,6 +62,8 @@ class User extends Authenticatable 'user_id_url', ]; + protected $with = ['accounts']; + /** * The accounts that this user manages * @@ -129,8 +131,7 @@ class User extends Authenticatable */ public function services() { - return $this->hasManyThrough(Models\Service::class,Models\Account::class) - ->with(['account','product','invoices.items.tax','type']); + return $this->hasManyThrough(Models\Service::class,Models\Account::class); } /** @@ -359,7 +360,6 @@ class User extends Authenticatable { $result = new DatabaseCollection(); $clients = $this->all_clients(); - $clients->load('accounts'); foreach ($clients->pluck('accounts') as $accounts) { foreach ($accounts as $o) { @@ -480,10 +480,6 @@ class User extends Authenticatable public function next_invoice_items(bool $future=FALSE): DatabaseCollection { $result = new DatabaseCollection; - $this->load([ - 'services.charges', - 'services.invoice_items' - ]); foreach ($this->services as $o) { if ($future) {