我试图找出使用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
答案 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();