我正在构建一个应用程序,将Laravel作为我的前端,将Angular作为我的后端。我在用户发布的帖子和评论上实施了Like系统。我与我喜欢的系统有多态关系,因为用户可以喜欢帖子+评论。我的模型看起来像这样:
喜欢模特
class Like extends Model
{
public function likeable()
{
return $this->morphTo();
}
}
发布模型
class Post extends Model {
public function user()
{
return $this->belongsTo('App\Models\User', 'author_id');
}
public function likes()
{
return $this->morphMany('App\Models\Like', 'likeable');
}
}
评论模型
class Comment extends Model
{
public function likes()
{
return $this->morphMany('Like');
}
}
我很困惑如何解决这个问题。当我加载帖子或评论时,我想要检索帖子详细信息(我已经可以检索)+类似的计数以及谁喜欢它。我如何急切地加载“喜欢”。数据与帖子?我应该在这里使用多态关系吗?提前谢谢!
My Like表格如下:
Schema::create('likes', function(Blueprint $table) {
$table->increments('id');
$table->integer('user_id'); // User who does the liking
$table->integer('likeable_id'); // User whose Comment/Post is liked
$table->string('likeable_type'); // Item that is being liked
// Could be Comment or Post (Models)
$table->timestamps();
});
答案 0 :(得分:1)
这是我现在也在研究的内容。在源代码中(乍一看)它表示它没有在急切加载上加载morphTo
,它只是传递一个虚拟查询。
至于从Post
或Comment
方面急切加载,你应该没问题。
$posts = Post::with('likes')->get();
$comments = Comment::with('likes')->get();
此外,因为你只需要计数,而不是像this这样的每一行都值得一看。
希望这有帮助!