gpt4 book ai didi

php - 交响乐 + 学说 : Models and Inheritance

转载 作者:行者123 更新时间:2023-12-01 17:14:48 27 4
gpt4 key购买 nike

我已将模型与实体分开。我有三个具有相应实体的模型: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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com