我有一个“小说”的模型,“书签”和“书签”。
我想显示一本小说的书签数量,并确定当前登录的用户是否对小说进行了书签。
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;
}是否有一种方法可以轻松地将此添加到我的查询中?
发布于 2016-11-03 18:13:38
方法first()会得到第一个结果或null。
解决方案
public function getUserBookmarkCountAttribute()
{
if ( !Auth::user() ) {
return false;
}
return !is_null($this->bookmarks()->where('user_id', Auth::user()->id)->first());
}替代解
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传递给模型。
https://stackoverflow.com/questions/40401455
复制相似问题