我想做这个:
// Model class
namespace Bookshop\Inventory\Model;
use Core\Inventory\Model\Product as BaseProduct;
class Book extends BaseProduct {
// ...
}
// Query class
namespace Bookshop\Inventory\Model;
use Core\Inventory\Model\ProductQuery as BaseProductQuery;
class BookQuery extends BaseProductQuery {
// ...
}
看起来不错,对吧?但:
$book = BookQuery::create()->find($id);
var_dump(get_class($book));
// expected: Bookshop\Inventory\Model\Book
// actual: Core\Inventory\Model\Product
AFAIK 这是因为 Propel 的关系是在构建时定义的,而不是运行时...我发现实现这一点的唯一方法是使用GlorpenPropelBundle中的扩展行为并在我的配置中定义扩展类:
glorpen_propel:
extended_models:
Core\Inventory\Model\Product: Bookshop\Inventory\Model\Book
很好,它有效,但肯定有更好的方法吗?我错过了什么,或者这真的是在 Propel + Symfony 中扩展模型的唯一方法吗?我真的很想使用 Propel 而不是 Doctrine,但是这样的事情让我觉得 Propel 根本不适合超过一定规模的项目......
(推进 1.6 + Symfony 2.3 顺便说一句)