Laravel ORM用户可以喜欢多个模型

时间:2014-04-07 13:16:23

标签: php orm laravel laravel-4 eloquent

我试图找出使用Laravel的Eloquent Laravel定义以下关系的最佳方法。

我有一个用户表和3个对象(玩家,团队,联盟),用户可以将其添加为收藏夹。

我知道我可以使用用户模型和每个对象创建三个数据透视表,但是我需要运行一个Union查询来列出用户的所有收藏,无论其类型如何。

User
 id

Favorite
 id
 user_id
 favorited_id  ( player_id or team_id or league id)
 favorite_type  ( player , team or league) 

Player
 id  

Team
 id

League
 id

这是我的模特。

https://www.dropbox.com/s/6au8giufaejcghc/Screen%20Shot%202014-04-07%20at%209.06.51%20AM.png

2 个答案:

答案 0 :(得分:3)

我对Favourite表做同样的事情。 laravel用polymorphic relations覆盖它。

你的表格看起来像

class Favourite extends Eloquent {

    public function favourable()
    {
        return $this->morphTo();
    }
}

class Team extends Eloquent {

    public function favourite()
    {
        return $this->morphMany('Favourite', 'favourable');
    }
}

...

您最喜欢的桌子看起来像

Favourite
  favourable_id: int
  favourable_type: string

您将其称为模型上的普通属性,如$player->favourable()

答案 1 :(得分:0)

您可以按照user3158900的建议使用多态,或者我的偏好是使用Laravel的查询生成器来执行联合查询。

http://laravel.com/docs/queries#unions

$first = DB::table('users')->whereNull('first_name');

$users = DB::table('users')->whereNull('last_name')->union($first)->get();