我找不到在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>
有没有办法让继承与抽象父类一起工作?
答案 0 :(得分:1)
单表继承的主要问题是你总是伪造东西。你得到这个错误,因为真实模型是AbstractBook
,没有别的......
使用abstract=false
,您将能够实现AbstractBook
(根本不是抽象的......),然后它将转换为ComicBook
。< / p>
通过设置abstract=true
,您无法实例化AbstractBook
。压倒一切救援!
我没有在代码中挖掘太多东西但是,如果你想用ComicBook
创建findOneOrCreate()
,则必须覆盖以下方法:getModelName()
在{ {1}}课程:
ComicBookQuery
最佳做法是覆盖满足您需求的方法;)