条件的不同关系

时间:2018-03-10 15:35:57

标签: laravel eloquent

我有粉丝表格,其中包含:

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”关系。我不知道这种关系是否正确......

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

嗯,在我看来,你应该修改你的迁移。

而不是让你的桌子:

id, user_id, follower_id, type

我会这样做:

id, user_id, page_id, group_id, follower_id, type

不要在数据库中做类似奇怪的事情,只需在迁移表中添加2个字段和/或关系。将它设置为unsigned()和nullable(),这样你就可以快速了解你的每个页面或组是否存在关系,并且你不会变得奇怪检查它的东西:D