我有一个如下的架构:
articles
id - integer
name - string
images
id - integer
name - string
videos
id - integer
name - string
feedback_questions
id - integer
question - string
feedbackables
id - integer
feedback_question_id - integer
feedbackable_id - integer
feedbackable_type - string
feedback_responses
id - integer
feedbackable_id - integer (FK to feedbackables.id)
user_id - integer
response - text
因此,许多反馈问题(例如,请按1-5的等级进行评分,您是否会推荐此内容等)可以应用于许多内容类型(文章,图片,视频)。
此反馈问题可以得到解答。
我在多对多设置方面都没有问题,例如
模型Article.php
:
public function feedbackQuestions()
{
return $this->morphToMany('App\FeedbackQuestion', 'feedbackable');
}
模型FeedbackQuestion.php
:
...
public function articles()
{
return $this->morphedByMany('App\Article', 'feedbackable');
}
...
但是,如何首先定义多余的列,然后再使用它呢?
我首先认为一对多就足够了,但这需要在数据透视表本身上指定,例如
模型Feedbackable.php
:
public function question()
{
return $this->hasOne('App\FeedbackQuestion', 'id', 'feedback_question_id');
}
public function answers()
{
return $this->hasMany('App\FeedbackResponse', 'id', 'feedbackable_id');
}
显然这并不理想,因为它会使所有内容变得笨拙。
我的最终目标是能够做到这一点。
$articleFeedbacks = Article::find(1)->with('feedbackQuestions.answers');
我已经考虑过查询构建器中的联接,这行得通吗?理想情况下,我想找到一个基于关系的解决方案,但我想知道是否有可能?我的架构不是一成不变的,所以有没有更好的方法来定义它?
为任何帮助预先加油。