微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法将假类没有数据库表/模型用于多态关系?

如何解决有没有办法将假类没有数据库表/模型用于多态关系?

我有一个 transactions 表,其中的事务类型可以演变为 TopUpTransactionDeductTransaction 等,这些类型保存了它们的特定信息(因为它们具有不同的字段)。

现在我有一个交易类型 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"
    }
}

解决方法

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;
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?