Propel在创建具有继承的具体类的实例时失败了吗?

时间:2012-02-10 00:14:20

标签: php orm propel

我找不到在Propel中使用findOrCreate()单继承和抽象父类的方法。这个小例子给了我一个致命错误

  

致命错误:无法实例化抽象类ComicBook   第1181行推进\查询\ ModelCriteria.php

抛出此致命错误的查询非常简单:

$thebook = ComicBookQuery::create()->filterById(1)->findOneOrCreate();

一小段数据库架构

<table name="book" abstract="true" phpName="AbstractBook">
    <column name="id" type="INTEGER" required="true"
       primaryKey="true" autoIncrement="true"/>
    <column name="type" type="VARCHAR" size="255" required="true"
       inheritance="single">
        <inheritance key="Abstract" class="AbstractBook"/>
        <inheritance key="ComicBook" class="ComicBook" extends="AbstractBook"/>
    </column>
</table>

有没有办法让继承与抽象父类一起工作?

1 个答案:

答案 0 :(得分:1)

单表继承的主要问题是你总是伪造东西。你得到这个错误,因为真实模型是AbstractBook,没有别的......

使用abstract=false,您将能够实现AbstractBook(根本不是抽象的......),然后它将转换为ComicBook。< / p>

通过设置abstract=true,您无法实例化AbstractBook。压倒一切救援!

我没有在代码中挖掘太多东西但是,如果你想用ComicBook创建findOneOrCreate(),则必须覆盖以下方法:getModelName()在{ {1}}课程:

ComicBookQuery

最佳做法是覆盖满足您需求的方法;)