首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果用户也有关系的话,还会有关系的回报量和一个bool。

如果用户也有关系的话,还会有关系的回报量和一个bool。
EN

Stack Overflow用户
提问于 2016-11-03 12:26:16
回答 1查看 309关注 0票数 0

我有一个“小说”的模型,“书签”和“书签”。

我想显示一本小说的书签数量,并确定当前登录的用户是否对小说进行了书签。

代码语言:javascript
复制
App\Novel::withCount('chapters', 'bookmarks')
           ->with(['author', 'ratings'])
           ->newestPublished()
           ->paginate(10)

这个节目的通话效果很好。不过,如果当前用户已将小说标记为书签,我希望直接查看结果。

对于书签的计数,我在我的小说模型中建立了以下内容

代码语言:javascript
复制
public function getBookmarksCountAttribute()
{
    return $this->bookmarks()->count();
}

我能否以某种方式创建另一个"getBookmarksCountAttribute“方法,然后这样工作

代码语言:javascript
复制
public function getUserBookmarkCountAttribute()
{
    if ( !Auth::user() ) {
        return false;
    }

    return $this->bookmarks()->where('user_id', Auth::user()->id)->first() ? true : false;
}

是否有一种方法可以轻松地将此添加到我的查询中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-03 18:13:38

方法first()会得到第一个结果或null。

解决方案

代码语言:javascript
复制
public function getUserBookmarkCountAttribute()
{
    if ( !Auth::user() ) {
        return false;
    }

    return !is_null($this->bookmarks()->where('user_id', Auth::user()->id)->first());
}

替代解

代码语言:javascript
复制
public function getUserBookmarkCountAttribute()
{
    if ( !Auth::user() ) {
        return false;
    }

    return $this->bookmarks()->where('user_id', Auth::user()->id)->first() instanceof Bookmark;
}

尖端1

您可以将属性添加到$appends数组中,因此不需要显式地将计数存储在表中。

尖端2

在您的模型中使用Auth facade并不是一个好的实践。更好的方法是通过依赖注入将用户对象/ id传递给模型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40401455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档