Database design 使用Laravel和雄辩的用户观察列表设计改进

Database design 使用Laravel和雄辩的用户观察列表设计改进,database-design,laravel,eloquent,Database Design,Laravel,Eloquent,我想在我的应用程序中为每个用户实现一种监视列表。监视列表可以保存不同类型的对象,每个对象都是数据库中的一个模型 下面是我已经实现的db模式的简要概述 大多数时候,我只需要从观察列表中检索特定的项目(如标签或艺术家)。这就是我现在工作的方式: // controller $watchedLabels = User::find(4)->labelsWatchlist(); // user model public function labelsWatchlist() { $o

我想在我的应用程序中为每个用户实现一种监视列表。监视列表可以保存不同类型的对象,每个对象都是数据库中的一个模型

下面是我已经实现的db模式的简要概述

大多数时候,我只需要从观察列表中检索特定的项目(如标签或艺术家)。这就是我现在工作的方式:

 // controller
 $watchedLabels = User::find(4)->labelsWatchlist();

 // user model
public function labelsWatchlist()
{
    $object_type = WatchlistObject::where('name', '=', 'label')->first();

    if ($watchlistObject) {
        return DB::table('users_watchlists')
                ->join('artists', 'users_watchlists.object_id', '=', 'artists.id')
                ->where('users_watchlists.user_id', '=', $this->id)
                ->where('users_watchlists.object_type_id', '=', $object_type->id)
                ->get();
    }
}
正如我所说的,这非常有效。。。但由于一些我无法解释的原因,我不太喜欢这个实现,觉得它有点蹩脚。我希望能够以“更流畅”的方式获得相同的结果,比如$user->watchlist->labels。但这在当前的设置中是不可能的


有什么建议吗

看看人际关系

这是一个:

然后简单地打电话:

$user->labels; // collection of observed labels
$user->artists; // collection like above

$artist->observers; // collection of observing users

在这种情况下,可以使用附加/分离方法来操作条目吗?
$user->labels; // collection of observed labels
$user->artists; // collection like above

$artist->observers; // collection of observing users