在laravel 5中以递归关系包含回复

时间:2015-11-24 10:28:40

标签: php laravel-5

我有一个名为回复的表格,其中包含论坛laravel应用程序中某个主题的所有回复。

**replies Table**
---------------
    reply_id
    content
    topic_id
    reply_by
    embed_reply
    created_at
    updated_at

回复可以有另一个回复Herself。因为 embed_reply 列包含 reply_id 包含的回复。

现在我想要包含回复的详细信息将存在于关于提取的父回复中。

为此我添加此方法来回复模型:

public function included_reply ()
        {
            return $this->with('replies', function ($query) {
                $query->where('reply_id',$this->embed_reply);
            });
        }

为了获取特定主题的回复,我写了这个:

$topic = Topic::whereTopicId($id)
                ->with([
                    'replies' => function ($query) {
                        $query->orderBy('created_at', 'desc');
                    }
                    , 'replies.included_reply'
                ])
                ->first();

所有这些回报都低于错误:

BadMethodCallException in Builder.php line 2071:
Call to undefined method Illuminate\Database\Query\Builder::replies()

我不知道该怎么做。 什么是解决方案?

1 个答案:

答案 0 :(得分:0)

我得到了答案:

laracasts.com/discuss

这是我必须添加的关系:

public function embed()
{
    return $this->belongsTo(Reply::class, 'embed_reply');
}

这用于获取:

$reply = Reply::find($reply_id);
$embed = $reply->embed;