雄辩的多态关系渴望加载

时间:2015-08-03 21:23:03

标签: php mysql laravel eloquent

我正在构建一个应用程序,将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();
    });

1 个答案:

答案 0 :(得分:1)

这是我现在也在研究的内容。在源代码中(乍一看)它表示它没有在急切加载上加载morphTo,它只是传递一个虚拟查询。

至于从PostComment方面急切加载,你应该没问题。

$posts = Post::with('likes')->get();
$comments = Comment::with('likes')->get();

此外,因为你只需要计数,而不是像this这样的每一行都值得一看。

希望这有帮助!