Skip to content

Core\HasCompany ​

Namespace: Unusualify\Modularous\Entities\Traits\Core\HasCompany

Associates a model (typically User) with a Company record. Auto-creates the Company on first save when a saving_company_name attribute is present. Appends several computed attributes for company display and billing state.


Boot Behavior ​

EventAction
creatingIf saving_company_name is set, captures it and removes it from attributes
updatingRemoves saving_company_name from attributes
savedIf creating and company name was captured, creates a new Company and sets company_id via updateQuietly

Relationship ​

php
public function company(): BelongsTo   // → Company model

Appended Attributes ​

Appended via initializeHasCompany() (unless $noCompanyAppends = true):

AttributeTypeDescription
company_namestringCompany name or empty string
name_with_companystring"User Name (Company Name)"
email_with_companystring"[email protected] (Company Name)"
valid_companyboolWhether the company is valid
show_billing_bannerbooltrue if user is a client, company is invalid, and billing is not disabled

Computed Attributes ​

AttributeTypeDescription
company_existsboolPre-computed from withExists('company') global scope
company_typestringCompany type (companyType) or 'corporate' if no company

Scopes ​

ScopeDescription
scopeCompanyUser($query)Records with a non-null company_id

Global Scopes ​

Registers company_exists via addGlobalScopesHasCompany().


Configuration ​

PropertyTypeDefaultDescription
$savingCompanyFieldNamestring'saving_company_name'Virtual fillable field name that triggers auto-company creation
$noCompanyAppendsboolfalseSet to true to disable auto-appended company attributes

Usage ​

php
use Unusualify\Modularous\Entities\Traits\Core\HasCompany;

class User extends Authenticatable
{
    use HasCompany;
}

// Read company
$user->company;
$user->company_name;
$user->name_with_company;     // "Jane Doe (Acme Corp)"
$user->valid_company;         // bool

// Auto-create company on user creation
$user = User::create([
    'name' => 'Jane',
    'email' => '[email protected]',
    'saving_company_name' => 'New Corp',
]);
$user->company;               // Company model with name "New Corp"

// Query
User::companyUser()->get();