belongsTo(Company::class); } public function scopeWhereCompany($query, $company_id) { $query->where('company_id', $company_id); } /** * Bulk create or update settings for a specific company. */ public static function setSettings(array $settings, mixed $company_id): void { foreach ($settings as $key => $value) { self::updateOrCreate( [ 'option' => $key, 'company_id' => $company_id, ], [ 'option' => $key, 'company_id' => $company_id, 'value' => $value, ] ); } } /** * Retrieve all settings for a company as a key-value collection. */ public static function getAllSettings(mixed $company_id): Collection { return static::whereCompany($company_id)->get()->mapWithKeys(function ($item) { return [$item['option'] => $item['value']]; }); } /** * Retrieve specific settings for a company as a key-value collection. */ public static function getSettings(array $settings, mixed $company_id): Collection { return static::whereIn('option', $settings)->whereCompany($company_id) ->get()->mapWithKeys(function ($item) { return [$item['option'] => $item['value']]; }); } /** * Retrieve a single company setting value by key, or null if not found. */ public static function getSetting(string $key, mixed $company_id): mixed { $setting = static::whereOption($key)->whereCompany($company_id)->first(); if ($setting) { return $setting->value; } else { return null; } } }