我在Eloquent中实施关系,我面临以下问题:
article
可以包含多个followers
(用户),而user
可以关注多个articles
(按照我的意思,用户会在后续文章中收到通知已更新)。
定义这种关系很容易:
class User extends Eloquent {
public function followedArticles()
{
return $this->belongsToMany('Article', 'article_followers');
}
}
也
class Article extends Eloquent {
public function followers()
{
return $this->belongsToMany('User', 'article_followers');
}
}
现在,在列出文章时,我想展示关于每篇文章的额外信息:如果当前用户是否跟随它。
因此,对于每篇文章我都会:
article_id
title
content
etc.
is_following
(额外字段)我现在正在做的是:
$articles = Article::with(array(
'followers' => function($query) use ($userId) {
$query->where('article_followers.user_id', '=', $userId);
}
)
);
这样我每篇文章都有一个额外的字段:'粉丝包含一个包含单个用户的数组(如果用户正在关注该文章),或者如果他没有关注它则为空数组。
在我的控制器中,我可以处理这些数据以获得我想要的形式,但我觉得这是一种黑客攻击。
我希望有一个简单的is_following
字段和boolean
(无论用户是否关注该文章)。
有一种简单的方法吗?
答案 0 :(得分:0)
这样做的一种方法是为自定义字段创建一个访问者:
class Article extends Eloquent {
protected $appends = array('is_following');
public function followers()
{
return $this->belongsToMany('User', 'article_followers');
}
public function getIsFollowingAttribute() {
// Insert code here to determine if the
// current instance is related to the current user
}
}
这样做会创建一个名为'is_following'的新字段,该字段将自动添加到返回的json对象或模型中。
确定当前登录用户是否关注该文章的代码取决于您的应用程序。 这样的事情应该有效:
return $this->followers()->contains($user->id);