如果用户具有关系,那么关系的雄辩返回量和一个布尔值

时间:2016-11-03 12:26:16

标签: php laravel laravel-5 eloquent laravel-5.3

我有一个“小说”的模型,它是“可收藏的”并且有“书签”

我想展示一本小说的书签数量,并确定当前登录的用户是否为该小说添加了书签。

App\Novel::withCount('chapters', 'bookmarks')
           ->with(['author', 'ratings'])
           ->newestPublished()
           ->paginate(10)

此显示的通话效果非常好。但是,如果当前用户为小说添加了书签,我很乐意直接看到结果。

对于书签的计数,我将以下内容构建到我的小说模型中

public function getBookmarksCountAttribute()
{
    return $this->bookmarks()->count();
}

我可以以某种方式创建另一个“getBookmarksCountAttribute”方法,然后像这样工作

public function getUserBookmarkCountAttribute()
{
    if ( !Auth::user() ) {
        return false;
    }

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

有没有办法轻松将其添加到我的查询中?

1 个答案:

答案 0 :(得分:1)

方法first()产生第一个结果或null。

解决方案

GET /eureka/v2/apps

替代解决方案

public function getUserBookmarkCountAttribute()
{
    if ( !Auth::user() ) {
        return false;
    }

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

提示1

您可以将该属性添加到$appends数组,这样您就不需要明确地将计数存储在表格中。

提示2

在模型中使用Auth Facade不是一个好习惯。更好的方法是使用依赖注入将用户对象/ id传递给模型。