clrghouz/app/Models/Zone.php

90 lines
1.8 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Traits\{QueryCacheableConfig,ScopeActive};
class Zone extends Model
{
use QueryCacheableConfig,ScopeActive;
/* SCOPES */
public function scopeDomainZoneOrder($query)
{
return $query
->select('zones.*')
->join('domains',['domains.id'=>'zones.domain_id'])
->orderBy('domains.name')
->orderBy('zone_id');
}
/* RELATIONS */
public function addresses()
{
return $this->hasMany(Address::class)
->active()
->FTNorder()
->with(['system.sessions','system.setup','zone.domain']);
}
public function domain()
{
return $this->belongsTo(Domain::class);
}
public function hosts()
{
return $this->hasMany(Address::class)
->where(function($query) {
return $query
->where(fn($q)=>$q->where('node_id',0)->where('point_id',0))
->orWhere('role',Address::NODE_HC);
})
->FTNorder()
->with(['system','zone.domain']);
}
public function hubs()
{
// @todo we should be able to add to this query, to count children of an address by using a group by?
return $this->hasMany(Address::class)
->where(function($query) {
return $query
->where(fn($q)=>$q->where('point_id',0))
->orWhere('role',Address::NODE_HC);
})
->FTNorder()
->with(['system','zone.domain']);
}
public function regions()
{
return $this->hasMany(Address::class)
->where(function($query) {
return $query
->where(fn($q)=>$q->where('node_id',0)->where('point_id',0))
->orWhere('role',Address::NODE_RC);
})
->orderBy('region_id')
->active()
->with(['system','zone.domain']);
}
public function system()
{
return $this->belongsTo(System::class);
}
/**
* Get the default route for this zone
*/
public function systems()
{
return $this->belongsToMany(System::class)
->withPivot(['default']);
}
}