我有粉丝表格,其中包含:
id, user_id, follower_id, type
type = follow of type,if follow user = 0,page = 1,group = 1
我使用 user_id 来设置 page_id 和 group_id 。
现在是问题,如果type不同,我想做出不同的关系...如果type = 0,将与users表和share table相关,如果type = 1,则会与pages table相关...
我试试这样:
型号:
public function page_links()
{
return $this->hasMany(Link::class, 'page_id', 'user_id')->Select('links.id', 'links.title', 'links.photo', 'links.country', 'links.friendly_url', 'links.clicks', 'links.description', 'links.suggestions', 'links.count_comments', 'links.url', 'links.shares', 'links.page_id', 'links.tag_id', 'links.created_at')->where('sponsored', 0)->where('scheduled', 0)>where('status', 1)->take(3)->orderBy('id','desc');
}
public function user_links()
{
return $this->hasMany(Share::class, 'user_id', 'user_id')->Select('id', 'link_id', 'user_id', 'shared_in', 'content', 'created_at')->take(3)->orderBy('id', 'desc')->where('type', '=', 0);
}
public function scopeProfile($query) {
return $query
->when($this->type == 0, function($q){
return $q->with('user_links');
})
->when($this->type == 1, function($q){
return $q->with('page_links');
})
->when($this->type == 2, function($q){
return $q->with('group_links');
});
}
控制器:
$feed = Feed::Profile()->where('follower_id', auth()->user()->id)
->take(10)
->get();
但是ALL,即使是类型1也会返回“user_links”关系。我不知道这种关系是否正确......
有人可以帮帮我吗?答案 0 :(得分:1)
嗯,在我看来,你应该修改你的迁移。
而不是让你的桌子:
id, user_id, follower_id, type
我会这样做:
id, user_id, page_id, group_id, follower_id, type
不要在数据库中做类似奇怪的事情,只需在迁移表中添加2个字段和/或关系。将它设置为unsigned()和nullable(),这样你就可以快速了解你的每个页面或组是否存在关系,并且你不会变得奇怪检查它的东西:D