2016-10-12 60 views
0

在我的论坛中,我展示了所有主题。它看起来像这样:订阅主题

enter image description here

这样用户就可以通过点击红色炉订阅。

我加载的主题与此JSON:

{ 
    "forum": { 
    "id": 1, 
    "slug": "test", 
    "name": "test", 
    "description": "test", 
    "created_at": null, 
    "updated_at": null 
    }, 
    "topics": { 
    "total": 6, 
    "per_page": 5, 
    "current_page": 1, 
    "last_page": 2, 
    "next_page_url": "http://forum.dev/api/forum/test?page=2", 
    "prev_page_url": null, 
    "from": 1, 
    "to": 5, 
    "data": [ 
     { 
     "id": 1, 
     "slug": "1", 
     "name": "1", 
     "description": "1", 
     "forum_id": 1, 
     "created_at": null, 
     "updated_at": null 
     }, 
     { 
     "id": 2, 
     "slug": "2", 
     "name": "1", 
     "description": "1\t", 
     "forum_id": 1, 
     "created_at": null, 
     "updated_at": null 
     }, 
     { 
     "id": 3, 
     "slug": "1", 
     "name": "1", 
     "description": "1\t", 
     "forum_id": 1, 
     "created_at": null, 
     "updated_at": null 
     }, 
     { 
     "id": 4, 
     "slug": "1", 
     "name": "1", 
     "description": "1", 
     "forum_id": 1, 
     "created_at": null, 
     "updated_at": null 
     }, 
     { 
     "id": 5, 
     "slug": "1", 
     "name": "1", 
     "description": "1", 
     "forum_id": 1, 
     "created_at": null, 
     "updated_at": null 
     } 
    ] 
    } 
} 

我返回该^这样的: $forum->topics()->orderBy('created_at', 'DESC')->paginate(5);

那么,如何让每一个话题对象的订阅价值?

所以这样的:

"data": [ 
      { 
      "id": 1, 
      "slug": "1", 
      "name": "1", 
      "description": "1", 
      "forum_id": 1, 
      "created_at": null, 
      "updated_at": null, 
      "subscribed": true 
      }, 

我已经做这在我的topic型号:

/** 
    * @return mixed 
    */ 
    public function subscriptions() 
    { 
     return Topic::subscribedBy(Auth::user())->get(); 
    } 

,它的工作。但是,我如何将每个主题发送给我。

+0

你应该看看'$ appends'财产 – Neat

+0

你是什么意思与? – Jamie

回答

1

您可以通过创建一个访问器来添加一个属性(它不存在于数据库中)。

public function getSubscriptionsAttribute() 
{ 
    return Topic::subscribedBy(Auth::user())->get(); 
} 

然后将其添加到$append属性。

protected $appends = ['subscriptions']; 

如果您正在使用的$visible白名单,你可能将它添加到该属性了。

Source(所有在底部的方式。)

+0

谢谢!很棒! – Jamie

+0

但这是好方法吗?因为它现在有很多查询吗? – Jamie

+0

那么,你正在使用'paginate(5)',所以我不认为你会遇到性能问题,它很有可能你可以优化它,但这到最后你:) – Neat