我已将模型与实体分开。我有三个具有相应实体的模型:Review、RatedReview 和 ScoredReview。他们的关系是 ScoredReview 扩展 RatedReview 扩展 Review。
所以对于我的模型,我有:
// Project/ReviewBundle/Model/Review.php
class Review
{
}
// Project/ReviewBundle/Model/RatedReview.php
class RatedReview extends Review
{
}
// Project/ReviewBundle/Model/ScoredReview.php
class ScoredReview extends RatedReview
{
}
然后我通过扩展模型来实现实体,如下所示:
// Project/ReviewBundle/Entity/Review.php
use Project\ReviewBundle\Model\Review as BaseReview;
class Review extends BaseReview
{
}
// Project/ReviewBundle/Entity/RatedReview.php
use Project\ReviewBundle\Model\RatedReview as BaseRatedReview;
class RatedReview extends BaseRatedReview
{
}
// Project/ReviewBundle/Entity/ScoredReview.php
use Project\ReviewBundle\Model\ScoredReview as BaseScoredReview;
class ScoredReview extends BaseScoredReview
{
}
所以继承发生在模型端。 Doctrine 似乎看不到这一点,并将它们映射到单独的表中。我理解这是因为 Doctrine 只查找扩展其他实体的实体,而不是扩展模型的实体。
是否有更好的方法将模型与实体分开,同时保留扩展实体的能力?这是特质派上用场的地方吗?
换句话说,我是否可以拥有一棵由模型组成的树,以及一棵由扩展这些模型的实体组成的树?
最佳答案
我已经针对这个问题提出了一个解决方案,它确实涉及到特征。
我正在做的基本上是尝试创建表格的几种变体。评论之间的关系更多是水平关系而不是垂直关系(一种类型的评论可能有评级,另一种类型是视频,另一种类型两者都有)。特征显然非常适合横向关系,因此我没有为每个变体创建模型,而是创建特征。
现在我的“模型”看起来像这样:
// Project/ReviewBundle/Entity/Review.php
use Project\ReviewBundle\Model\Review as BaseReview;
class Review extends BaseReview
{
}
// Project/ReviewBundle/Entity/RatedReviewTrait.php
trait RatedReviewTrait
{
}
// Project/ReviewBundle/Entity/ScoredReviewTrait.php
trait ScoredReviewTrait
{
}
我的实体看起来像这样:
// Project/ReviewBundle/Entity/Review.php
use Project\ReviewBundle\Model\Review as BaseReview;
class Review extends BaseReview
{
}
// Project/ReviewBundle/Entity/RatedReview.php
use Project\ReviewBundle\Model\RatedReviewTrait;
class RatedReview extends Review
{
use RatedReviewTrait;
}
// Project/ReviewBundle/Entity/ScoredReview.php
use Project\ReviewBundle\Model\RatedReviewTrait;
use Project\ReviewBundle\Model\ScoredReviewTrait;
class ScoredReview extends Review
{
use RatedReviewTrait;
use ScoredReviewTrait;
}
我的模型与我的实体保持分离,作为奖励,我将彼此的变化解耦 - 非常棒。我看到的唯一问题是这需要 PHP >= 5.4。
关于php - 交响乐 + 学说 : Models and Inheritance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23200843/