合并活动Feed中的活动

时间:2017-02-01 09:36:41

标签: php laravel laravel-5.2 polymorphism feed

我正在使用活动Feed构建应用,就像Facebook或Instagram一样。例如,当用户上传图片时,该图片会自动在活动表中创建一个条目。上传的图片与活动之间存在多态关系。活动模型将处理以下,喜欢和其他事情。活动模型看起来像那样

活动

model_id       12
model_type     picture
user_id        1313
activity_type  picture_upload

如果用户决定在短时间内再次上传另一张图片,我希望合并这些与相同型号相关的类似活动,就像Instagram一样。 此活动与上传的两张图片都有关系。 为此,我在活动表中创建了一个名为multiple_ids的附加字段,并在那里插入了后续图片ID

活动

model_id       12
model_type     picture
user_id        1313
activity_type  picture_upload
multiple_ids   13,14,15

这是完全有效的,我为活动创建了方法,以便获得那些"多个模型"。但是,例如,如果用户决定删除multiple_ids字段中包含的图片,我将不得不在multiple_ids中进行LIKE查询。我认为应该有更好的方法来做到这一点。你会怎么做?范围合并"类似的活动"检索活动是一种好习惯吗?

2 个答案:

答案 0 :(得分:2)

就个人而言,我有一个交叉引用表,它只存储ID的关系。

parent | related
----------------
12     |  13
12     |  14
12     |  15

然后,如果用户删除了131415,您只需从表中删除此关系即可。

如果有人删除12,那么棘手的部分就会出现。在这里,您必须决定如何处理它。您可以删除父亲为12的所有人,基本上是孤儿活动。或者,您可以通过一些工作来代替1415与活动13

答案 1 :(得分:2)

我认为为活动生成组ID是个好主意,如果活动重复,您可以为其分配相同的组ID。

<强>活动

model_id       12
model_type     picture
user_id        1313
activity_type  picture_upload
group_id       picture_upload_1313_14505049334
created_at     2017-02-01 11:55:00

当活动创建时,您可以订阅活动并检查此用户是否在过去五分钟内完成此活动 - 然后您分配相同的组ID 它可能在Laravel 4上看起来像这样。

Activity::creating(function($activity) {
  $originatingActivity = Activity::where('created_at', '>', Date::subMinutes(5))->where('activity_type', $activity->activity_type)->where('user_id',$activity->user_id)->first();
  if ($originatingActivity) {
     $activity->group_id = $originatingActivity->group_id;
  }
  else {
    $activity->group_id = $activity->activity_type . $activity->user_id . time()
  }

})

然后在代码中你可以通过group_id获取活动,所以如果你删除一个活动它不会破坏任何东西,你可以使用groupBy语句编写方法来轻松计算它们。 这样,通过一些代码更改,您可以根据需要对不同的关系类型进行分组

相关问题