0

我有一个transactions表,其中的事务类型会变形为TopUpTransaction,DeductTransaction等,其中包含其特定信息(因为它们具有不同的字段)。

现在我有一个SecurityDeposit不需要专用模型的事务类型,因为它不需要任何额外的信息。

我可以通过拥有一个模型和一个只保留字段的数据库表来使其与默认变形一起使用id,但这没有意义。

有没有办法绕过创建一个空模型和数据库表?

class Transaction extends Model {

    public function transactionable(): MorphTo
    {
        return $this->morphTo();
    }

    public function text() 
    {
        return $this->transactionable->text()
    }

    public function class() 
    {
        return $this->transactionable->class()
    }
}
class TopUpTransaction extends Model {

    public function text() {
        return "Top Up"
    }

    public function class() {
        return "text-success"
    }
}

class DeductTransaction extends Model {
 // has text() and class() methods 
}

但是,我不想在数据库中创建 SecurityDepositTransaction 因为它不需要任何其他信息

class SecurityDepositTransaction { 
    
    public function text() {
        return "Security Deposit"
    }

    public function class() {
        return "text-danger"
    }
}
4

1 回答 1

0

SecurityDeposit 和 Transaction 之间的经典多态关系

class SecurityDeposit extends Transaction
{
    protected $table = 'transactions';
    
    // and use it as if you use Transaction, but it will be a seperate class
    // if for example, this class has a special relation that Transaction doesnt have,
    // you declare it here. same for any speccific method to this class

    public function specialRelation() {
        return $this->hasMany(AnotherClass::class);
    }

    public function getDepositAmounr() {
        return $this->custom_data;
    }
}
于 2021-07-03T21:57:24.917 回答