Add Compoships for multile key relationships, first implemented with Service::class
This commit is contained in:
parent
2a19f14adb
commit
ec99a5ff75
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Leenooks\Traits\ScopeActive;
|
use Leenooks\Traits\ScopeActive;
|
||||||
|
|
||||||
|
use App\Models\Scopes\SiteScope;
|
||||||
use App\Interfaces\IDs;
|
use App\Interfaces\IDs;
|
||||||
use App\Traits\SiteID;
|
use App\Traits\SiteID;
|
||||||
|
|
||||||
@ -23,8 +25,7 @@ use App\Traits\SiteID;
|
|||||||
*/
|
*/
|
||||||
class Account extends Model implements IDs
|
class Account extends Model implements IDs
|
||||||
{
|
{
|
||||||
use SiteID;
|
use Compoships,HasFactory,ScopeActive,SiteID;
|
||||||
use HasFactory,ScopeActive;
|
|
||||||
|
|
||||||
/* INTERFACES */
|
/* INTERFACES */
|
||||||
|
|
||||||
@ -87,7 +88,8 @@ class Account extends Model implements IDs
|
|||||||
|
|
||||||
public function services($active=FALSE)
|
public function services($active=FALSE)
|
||||||
{
|
{
|
||||||
$query = $this->hasMany(Service::class);
|
$query = $this->hasMany(Service::class,['account_id','site_id'],['id','site_id'])
|
||||||
|
->withoutGlobalScope(SiteScope::class);
|
||||||
|
|
||||||
return $active ? $query->active() : $query;
|
return $active ? $query->active() : $query;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
@ -16,7 +17,7 @@ use App\Traits\SiteID;
|
|||||||
*/
|
*/
|
||||||
class Charge extends Model
|
class Charge extends Model
|
||||||
{
|
{
|
||||||
use SiteID;
|
use Compoships,SiteID;
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'attributes' => 'json',
|
'attributes' => 'json',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Clarkeash\Doorman\Facades\Doorman;
|
use Clarkeash\Doorman\Facades\Doorman;
|
||||||
use Clarkeash\Doorman\Models\Invite;
|
use Clarkeash\Doorman\Models\Invite;
|
||||||
@ -10,7 +11,7 @@ use Illuminate\Support\Arr;
|
|||||||
use Leenooks\Traits\ScopeActive;
|
use Leenooks\Traits\ScopeActive;
|
||||||
|
|
||||||
use App\Interfaces\IDs;
|
use App\Interfaces\IDs;
|
||||||
use App\Traits\{NextKey,PushNew};
|
use App\Traits\PushNew;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Invoice
|
* Class Invoice
|
||||||
@ -33,7 +34,7 @@ use App\Traits\{NextKey,PushNew};
|
|||||||
*/
|
*/
|
||||||
class Invoice extends Model implements IDs
|
class Invoice extends Model implements IDs
|
||||||
{
|
{
|
||||||
use PushNew,ScopeActive;
|
use Compoships,PushNew,ScopeActive;
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'reminders'=>'json',
|
'reminders'=>'json',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
@ -20,7 +21,7 @@ use App\Traits\PushNew;
|
|||||||
*/
|
*/
|
||||||
class InvoiceItem extends Model
|
class InvoiceItem extends Model
|
||||||
{
|
{
|
||||||
use PushNew;
|
use Compoships,PushNew;
|
||||||
|
|
||||||
protected $dates = [
|
protected $dates = [
|
||||||
'start_at',
|
'start_at',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Illuminate\Container\Container;
|
use Illuminate\Container\Container;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
@ -66,7 +67,7 @@ use App\Traits\{ProductDetails,SiteID};
|
|||||||
*/
|
*/
|
||||||
class Product extends Model implements IDs
|
class Product extends Model implements IDs
|
||||||
{
|
{
|
||||||
use HasFactory,SiteID,ProductDetails,ScopeActive;
|
use Compoships,HasFactory,SiteID,ProductDetails,ScopeActive;
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'pricing'=>'collection',
|
'pricing'=>'collection',
|
||||||
|
@ -17,7 +17,12 @@ class SiteScope implements Scope
|
|||||||
*/
|
*/
|
||||||
public function apply(Builder $builder, Model $model)
|
public function apply(Builder $builder, Model $model)
|
||||||
{
|
{
|
||||||
// @todo Need to only do this, if the original query doesnt already have a where condition with a site_id
|
$builder->when(
|
||||||
$builder->where($model->getTable().'.site_id',config('site')->site_id);
|
! collect($builder->getQuery()->wheres)->pluck('column')->contains(function($item) { return preg_match('/^(.*[^.]\.)?site_id/',$item); }),
|
||||||
|
function($q) use ($model)
|
||||||
|
{
|
||||||
|
return $q->where($model->getTable().'.site_id',config('site')->site_id);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Awobaz\Compoships\Compoships;
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Database\Eloquent\Casts\AsCollection;
|
use Illuminate\Database\Eloquent\Casts\AsCollection;
|
||||||
@ -53,7 +54,7 @@ use App\Traits\SiteID;
|
|||||||
*/
|
*/
|
||||||
class Service extends Model implements IDs
|
class Service extends Model implements IDs
|
||||||
{
|
{
|
||||||
use HasFactory,ScopeServiceUserAuthorised,SiteID;
|
use HasFactory,ScopeServiceUserAuthorised,SiteID,Compoships;
|
||||||
|
|
||||||
protected $casts = [
|
protected $casts = [
|
||||||
'order_info'=>AsCollection::class,
|
'order_info'=>AsCollection::class,
|
||||||
@ -325,11 +326,8 @@ class Service extends Model implements IDs
|
|||||||
*/
|
*/
|
||||||
public function account()
|
public function account()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Account::class)
|
return $this->belongsTo(Account::class,['account_id','site_id'],['id','site_id'])
|
||||||
->when($this->site_id,function($q) {
|
->withoutGlobalScope(SiteScope::class);
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -349,11 +347,8 @@ class Service extends Model implements IDs
|
|||||||
*/
|
*/
|
||||||
public function charges()
|
public function charges()
|
||||||
{
|
{
|
||||||
return $this->hasMany(Charge::class)
|
return $this->hasMany(Charge::class,['service_id','site_id'],['id','site_id'])
|
||||||
->when($this->site_id,function($q) {
|
->withoutGlobalScope(SiteScope::class)
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
})
|
|
||||||
->where('active','=',TRUE)
|
->where('active','=',TRUE)
|
||||||
->orderBy('created_at');
|
->orderBy('created_at');
|
||||||
}
|
}
|
||||||
@ -361,11 +356,8 @@ class Service extends Model implements IDs
|
|||||||
// @todo changed to invoiced_items
|
// @todo changed to invoiced_items
|
||||||
public function invoice_items($active=TRUE)
|
public function invoice_items($active=TRUE)
|
||||||
{
|
{
|
||||||
$query = $this->hasMany(InvoiceItem::class)
|
$query = $this->hasMany(InvoiceItem::class,['service_id','site_id'],['id','site_id'])
|
||||||
->when($this->site_id,function($q) {
|
->withoutGlobalScope(SiteScope::class)
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
})
|
|
||||||
->where('item_type','=',0)
|
->where('item_type','=',0)
|
||||||
->orderBy('start_at');
|
->orderBy('start_at');
|
||||||
|
|
||||||
@ -383,7 +375,7 @@ class Service extends Model implements IDs
|
|||||||
{
|
{
|
||||||
$query = $this->hasManyThrough(Invoice::class,InvoiceItem::class,NULL,'id',NULL,'invoice_id')
|
$query = $this->hasManyThrough(Invoice::class,InvoiceItem::class,NULL,'id',NULL,'invoice_id')
|
||||||
->when($this->site_id,function($q) {
|
->when($this->site_id,function($q) {
|
||||||
return $q->where('site_id', $this->site_id)
|
return $q->where('invoices.site_id', $this->site_id)
|
||||||
->withoutGlobalScope(SiteScope::class);
|
->withoutGlobalScope(SiteScope::class);
|
||||||
})
|
})
|
||||||
->distinct('id')
|
->distinct('id')
|
||||||
@ -406,11 +398,8 @@ class Service extends Model implements IDs
|
|||||||
*/
|
*/
|
||||||
public function orderedby()
|
public function orderedby()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Account::class)
|
return $this->belongsTo(Account::class,['ordered_by','site_id'],['id','site_id'])
|
||||||
->when($this->site_id,function($q) {
|
->withoutGlobalScope(SiteScope::class);
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -420,11 +409,8 @@ class Service extends Model implements IDs
|
|||||||
*/
|
*/
|
||||||
public function product()
|
public function product()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(Product::class)
|
return $this->belongsTo(Product::class,['product_id','site_id'],['id','site_id'])
|
||||||
->when($this->site_id,function($q) {
|
->withoutGlobalScope(SiteScope::class);
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -434,11 +420,7 @@ class Service extends Model implements IDs
|
|||||||
*/
|
*/
|
||||||
public function type()
|
public function type()
|
||||||
{
|
{
|
||||||
return $this->morphTo(null,'model','id','service_id')
|
return $this->morphTo(null,'model','id','service_id');
|
||||||
->when($this->site_id,function($q) {
|
|
||||||
return $q->where('site_id', $this->site_id)
|
|
||||||
->withoutGlobalScope(SiteScope::class);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SCOPES */
|
/* SCOPES */
|
||||||
|
@ -15,6 +15,7 @@ use Leenooks\Traits\ScopeActive;
|
|||||||
use Leenooks\Traits\UserSwitch;
|
use Leenooks\Traits\UserSwitch;
|
||||||
|
|
||||||
use App\Interfaces\IDs;
|
use App\Interfaces\IDs;
|
||||||
|
use App\Models\Scopes\SiteScope;
|
||||||
use App\Notifications\ResetPassword as ResetPasswordNotification;
|
use App\Notifications\ResetPassword as ResetPasswordNotification;
|
||||||
use App\Traits\{QueryCacheableConfig,SiteID};
|
use App\Traits\{QueryCacheableConfig,SiteID};
|
||||||
|
|
||||||
@ -412,6 +413,7 @@ class User extends Authenticatable implements IDs
|
|||||||
->groupBy(['invoice_id']);
|
->groupBy(['invoice_id']);
|
||||||
|
|
||||||
$summary = (new Invoice)
|
$summary = (new Invoice)
|
||||||
|
->withoutGlobalScope(SiteScope::class)
|
||||||
->select([
|
->select([
|
||||||
'invoice_id',
|
'invoice_id',
|
||||||
DB::raw('SUM(discount) AS discount'),
|
DB::raw('SUM(discount) AS discount'),
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-zlib": "*",
|
"ext-zlib": "*",
|
||||||
|
"awobaz/compoships": "^2.1",
|
||||||
"barryvdh/laravel-snappy": "^1.0",
|
"barryvdh/laravel-snappy": "^1.0",
|
||||||
"clarkeash/doorman": "^7.0",
|
"clarkeash/doorman": "^7.0",
|
||||||
"doctrine/dbal": "^2.10",
|
"doctrine/dbal": "^2.10",
|
||||||
|
62
composer.lock
generated
62
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "be607de05c3acfcd58f3b71db50164a6",
|
"content-hash": "1c7f30fd0cea07af4f43d6ef6dcdab18",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "asm89/stack-cors",
|
"name": "asm89/stack-cors",
|
||||||
@ -62,6 +62,66 @@
|
|||||||
},
|
},
|
||||||
"time": "2022-01-18T09:12:03+00:00"
|
"time": "2022-01-18T09:12:03+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "awobaz/compoships",
|
||||||
|
"version": "2.1.4",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/topclaudy/compoships.git",
|
||||||
|
"reference": "ba86741d9b439d1179a6432dded92b0ecc89a63a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/topclaudy/compoships/zipball/ba86741d9b439d1179a6432dded92b0ecc89a63a",
|
||||||
|
"reference": "ba86741d9b439d1179a6432dded92b0ecc89a63a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"illuminate/database": ">=5.6 <10.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-sqlite3": "*"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"awobaz/blade-active": "Blade directives for the Laravel 'Active' package",
|
||||||
|
"awobaz/eloquent-auto-append": "Automatically append accessors to model serialization",
|
||||||
|
"awobaz/eloquent-mutators": "Reusable mutators (getters/setters) for Laravel 5's Eloquent",
|
||||||
|
"awobaz/syntactic": "Syntactic sugar for named and indexed parameters call."
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Awobaz\\Compoships\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Claudin J. Daniel",
|
||||||
|
"email": "cdaniel@awobaz.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Laravel relationships with support for composite/multiple keys",
|
||||||
|
"keywords": [
|
||||||
|
"laravel",
|
||||||
|
"laravel composite keys",
|
||||||
|
"laravel relationships"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/topclaudy/compoships/issues",
|
||||||
|
"source": "https://github.com/topclaudy/compoships/tree/2.1.4"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://paypal.me/awobaz",
|
||||||
|
"type": "custom"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2022-06-22T11:42:37+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "barryvdh/laravel-snappy",
|
"name": "barryvdh/laravel-snappy",
|
||||||
"version": "v1.0.0",
|
"version": "v1.0.0",
|
||||||
|
Loading…
Reference in New Issue
Block a user