私はこれをしたい:
// 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
私の知る限り、これは Propel の関係が実行時ではなくビルド時に定義されるという事実によるものです...これを達成するために私が見つけた唯一の方法は、GlorpenPropelBundleにある拡張動作を使用し、構成で拡張クラスを定義することです:
glorpen_propel:
extended_models:
Core\Inventory\Model\Product: Bookshop\Inventory\Model\Book
うまくいきましたが、確かにもっと良い方法がありますか? 私は何かを見逃していましたか、それとも Propel + Symfony でモデルを拡張する唯一の方法ですか? 私はDoctrineよりもPropelを使いたいのですが、このようなことから、Propelは特定のサイズを超えるプロジェクトには単に適していないと思います...
(Propel 1.6 + Symfony 2.3 ところで)