2012-02-10 52 views
0

我找不到在Propel中使用带单继承和抽象父类的findOrCreate()的方法。这个小例子给了我一个致命错误Propel无法通过继承创建具体类的实例?

Fatal error: Cannot instantiate abstract class ComicBook propel\query\ModelCriteria.php on line 1181

查询抛出这个致命的错误是相当简单:

$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> 

有什么办法获得继承w与抽象的父类一起工作?

回答

1

单表继承的主要问题是你总是假货。因为真正的模型是AbstractBook,没有别的你得到这个错误...

随着abstract=false,你就可以实例化一个AbstractBook(该不会是抽象的都...),然后将它转化到ComicBook

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

我没挖了很多的代码,但是,如果你想创建ComicBookfindOneOrCreate(),你就必须重写下列方法:getModelName()ComicBookQuery类:

<?php 

class ComicBookQuery extends BaseComicBookQuery { 

    public function getModelName() 
    { 
     return 'ComicBook';                                
    } 

} // ComicBookQuery 

这是一个最好的做法,以覆盖方法,以适应您的需求;)

+0

谢谢,真的让我的一天哥们。当然,我需要抽象的父类! – gremo 2012-02-10 15:58:20

相关问题