我有一个相当简单的应用程序,用户可以报告其他用户的评论和食谱.我使用多态关系来存储报告.哪个工作正常;但是,我现在正试图让用户犯下的罪行.
@H_502_42@获取用户报告不是问题,可以使用user-> reports()直接完成,但我非常希望获得其他人报告该用户的报告.我可以使用hasManyThrough关系或者一次仅在一个模型上进行查询.
恩.
public function offenses() { return $this->hasManyThrough('Recipe','Reports'); }
要么
->with('user.recipe.reports')
问题是我的可报告对象不仅仅是食谱,它可能是注释,图像等.因此,不必使用多个函数,逻辑方法是以某种方式解析hasManyThrough各种参数之间的关系.
理论上看起来像这样:
public function offenses() { return $this->hasManyThrough(['Recipe','RecipeComments'],'Reports'); }
这有可能吗?有一些没有文档的语法?如果不是,有任何聪明的解决方法/黑客?
可能的方案?
可接受的解决方案是在我的报告表上添加另一列并且只添加这样的offender_id吗?
ID | User_id | Offender_id | Reportable_type | Reportable_id
这意味着我可以在我的用户模型上建立关系,通过该列连接攻击.但这会被视为多余吗?由于我已经通过可报告模型获得了罪犯?
楷模
多态模型
class Report extends Model { public function reportable() { return $this->morphTo(); } public function User() { return $this->belongsTo('App\User'); } }
食谱模型
class Recipe extends Model { public function user() { return $this->belongsTo('App\User'); } public function reports() { return $this->morphMany('App\Report','reportable'); } }
评论模型
class RecipeComment extends Model { public function user() { return $this->belongsTo('App\User'); } public function reports() { return $this->morphMany('App\Report','reportable'); } }