L4中有多个附加表

时间:2013-05-16 09:25:53

标签: laravel laravel-4

我有这样的架构:

schema

现在我想在Laravel 4中使用它。到目前为止,我只能在不触及owntype的情况下为某些用户获取游戏。代码:

public function games() {
     return $this->belongsToMany('Game','games_users','owntype_id','games_id')->where('user_id','1');
}

我唯一得到的是onwtype_id。如何将owntype表添加到“equasion”?

1 个答案:

答案 0 :(得分:0)

您可以通过关系函数上的withPivot函数指定额外的数据透视表列。

基本上我认为你想这样做:

class User extends Eloquent {

    public function games()
    {
        return $this->belongsToMany('Game', 'games_users')->withPivot('owntype_id');
    }

}

class Game extends Eloquent {

    public function users()
    {
        return $this->belongsToMany('User', 'games_users')->withPivot('owntype_id');
    }

}

class Owntype extends Eloquent {

    protected $table = 'owntype';

}

// Now you can do:
foreach ($user->games as $game)
{
    // Echo each Owntype description.
    echo Owntype::find($game->pivot->owntype_id)->description;
}

为了记录...我认为你可能会为owntype创建一个新表格,从而做得太过分了。只需将说明设置为数据透视表上的type列即可。还要确保您的数据透视表名为game_user(单数,按字母顺序排列),Laravel将知道自动使用哪个数据透视表。

class User extends Eloquent {

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

}

class Game extends Eloquent {

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

}

// Now you can do:
foreach ($user->games as $game)
{
    // Echo each ownership type.
    echo $game->pivot->type;
}

有关使用数据透视表的更多信息可以在the Laravel 4 docs中找到。