File: /var/www/ipsremont-demo/app/Models/Region.php
<?php
namespace App\Models;
use App\Traits\Displayed;
use App\Traits\My;
use App\Traits\Sortable;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* @property string $name
* @property string $external_database_code
* @property int $currency_id
* @property string $deleted_at
* @property string $created_at
* @property string $updated_at
*
* @property Currency $currency
* @property Collection|Branch[] $branches
*/
class Region extends BaseModel
{
use SoftDeletes;
use Sortable;
use Displayed;
use My;
protected $table = 'regions';
protected $fillable = [
'name',
'external_database_code',
'currency_id',
];
protected static $labels = [
'name' => 'regions.name',
'external_database_code' => 'regions.external_database_code',
'currency_id' => 'regions.currency',
'branches' => 'regions.selectBranches',
];
public static function columns(): array
{
return [
'fields' => [
[
'displayName' => 'regions.name',
'field' => 'name',
'sort' => true,
'sortType' => 'asc',
],
[
'displayName' => 'regions.currency',
'field' => 'currency_id',
'sort' => true,
'sortType' => 'asc',
],
[
'displayName' => 'regions.branches',
'field' => 'branches',
'sort' => false,
],
],
'sortDefault' => [
[
'field' => 'id',
'sort' => 'desc',
],
],
];
}
public function getAvailableBranches(): Collection
{
$regionQuery = self::query();
if (!empty($this->id)) {
$regionQuery->where('id', '!=', $this->id);
}
$availableRegions = $regionQuery->pluck('id')->toArray();
return Branch::query()->whereNotIn('region_id', $availableRegions)->get();
}
// MARK: - Relations
public function currency(): BelongsTo
{
return $this->belongsTo(Currency::class);
}
public function branches(): HasMany
{
return $this->hasMany(Branch::class, 'region_id');
}
}