我有一个现有的应用程序,在评论和视频/图像表之间设置了多态关系(视频和图像可以有很多评论):
- id
- title
- id
- url
- id
- parent_id (video or image primary key)
- parent_type (video or image)
现在我的客户已请求向应用添加活动源。 Feed必须提取所有新添加的视频和按排名排序的图片及其评论。
我添加了一个活动表
-id
-parent_id (video or image primary key)
-parent_type (video or image)
-rank
-metadata
元数据列包含一些非规范化数据以显示Feed,因此我无需拉入每个视频或图像。
注意:上面是我的应用程序的简化版本。实际上,我只有视频/图像类型。
我如何设置Eloquent以尽可能少的查询获取所有相关评论的所有活动?我真的很想阻止在foreachloop中进行查询。
可以使用活动表的其他数据库方案。
答案 0 :(得分:0)
您可以尝试这样的事情:
class Activity extends Eloquent {
function parent() {
return $this->belongsTo($this->getParentEloquentClass(), 'parent_id');
}
private function getParentEloquentClass() {
switch ($this->parent_type) {
case 'video':
return 'Video'; // or your video model class name
case 'image':
return 'Image'; // or your image model class name
....
}
}
}
class Video extends Eloquent {
function activities() {
return $this->hasMany('Activity', 'activity_id');
}
}
然后,您可以使用您提到的评论查询最新活动:
Activity::with('parent.comments');
我不确定这是否有用,但值得尝试一下。