我怎样才能在Laravel的Eloquent中代表这个游戏所有者关系

时间:2013-12-23 21:10:11

标签: php laravel laravel-4 eloquent object-relational-model

我正在试图弄清楚我遇到的逻辑问题,我不知道还能在哪里问问题!

我有两个对象,我试图描述它们; UserGame。所以,现在,我有User属于许多Games,而Game属于许多Users。我想要描述的是User拥有Game时的特殊情况。据推测,这只是表owner_id中的一列。然而,我正在努力确定如何在Eloquent中表达这一点。我是否需要为游戏所有者创建一个新对象?或者我可以使用某种用户角色来描述这个吗?

游戏

class Game extends Eloquent 
{
    protected $guarded = array();
    public static $rules = array();

    // Game belongsToMany User
    public function users()
    {
        return $this->belongsToMany('User');
    }

    // Need to identify the owner user.
}

用户

class User extends Eloquent
{
    protected $guarded = array();
    public static $rules = array();

    // User belongsToMany Game
    public function games()
    {
        return $this->belongsToMany('Game');
    }
}

我甚至难以弄清楚如何以清晰简洁的方式提出这个问题,所以如果需要更多细节,请不要犹豫。

1 个答案:

答案 0 :(得分:2)

你需要的是桌子:games_owners。这是它的迁移模式:

Schema::create('games_owners', function($table)
{
    $table->increments('id');
    $table->integer('user_id');
    $table->integer('game_id');
    $table->timestamps();
});

这将是您的用户模型:

class User extends Eloquent
{
    protected $guarded = array();
    public static $rules = array();

    // User belongsToMany Game
    public function games()
    {
        return $this->belongsToMany('Game', 'games_owners', 'user_id');
    }
}

你的游戏模型:

class Game extends Eloquent 
{
    protected $guarded = array();
    public static $rules = array();

    // Game belongsToMany User
    public function users()
    {
        return $this->belongsToMany('User', 'games_owners', 'game_id');
    }

    // Need to identify the owner user.
}

然后你就可以做到这样的事情:

$user = User::find(1);

foreach($user->games as $game) {
    echo $game->name;
}