Files
shipping-portal/app/Models/Group.php
T
2024-06-26 12:47:44 +08:00

96 lines
2.3 KiB
PHP

<?php
namespace App\Models;
use App\Classes\General\Traits\LogData;
use Illuminate\Database\Eloquent\Model;
use App\Classes\General\Interfaces\Documentable;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Staudenmeir\EloquentHasManyDeep\HasManyDeep;
use Staudenmeir\EloquentHasManyDeep\HasRelationships;
use App\Classes\General\Interfaces\Transactionable;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
class Group extends Model implements Documentable, Transactionable
{
use HasRelationships;
use \Staudenmeir\EloquentHasManyDeep\HasTableAlias;
use SoftDeletes;
/**
* @return MorphMany
*/
public function transactions(): MorphMany
{
return $this->MorphMany(GroupTransaction::class, 'group');
}
/**
* @return HasMany
*/
public function groupTransactions(): HasMany
{
return $this->hasMany(GroupTransaction::class);
}
/**
* @return MorphMany
*/
public function documents(): morphMany
{
return $this->morphMany(Document::class, 'owner');
}
/**
* @return BelongsTo
*/
public function currency(): BelongsTo
{
return $this->BelongsTo(Currency::class, 'currency_id', 'id');
}
/**
* @return HasManyDeep
*/
public function transferFees(): HasManyDeep
{
return $this->HasManyDeep(Transaction::class, [GroupTransaction::class, Transaction::class.' as alias'], ['group_id', ['owner_type', 'owner_id'], ['owner_type', 'owner_id']], ['id', null, null]);
}
/**
* @return BelongsTo
*/
public function issuerCompany(): BelongsTo
{
return $this->BelongsTo(CompanyModule::class, 'issuer', 'id');
}
/**
* @return BelongsTo
*/
public function receiverCompany(): BelongsTo
{
return $this->BelongsTo(CompanyModule::class, 'receiver', 'id');
}
/**
* @return BelongsTo
*/
public function original_currency(): BelongsTo
{
return $this->BelongsTo(Currency::class, 'original_currency_id', 'id');
}
/**
* @return hasOne
*/
public function payment()
{
return $this->hasOne(Transaction::class, 'payment_reference', 'reference');
}
}