HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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');
    }

}