M:Laravel 4上的N个关系

时间:2014-07-09 10:57:53

标签: php laravel orm laravel-4 relational-database

我有一个在Laravel 4中完成的webapp,用户可以在其中创建民意调查并对其进行投票。这是迁移(简化):

民意调查的迁移:

public function up() {
    Schema::create('polls', function(Blueprint $table) {
        $table->increments('id');
        $table->string('topic');
        $table->timestamps();
    });
}

用户迁移:

public function up() {
    Schema::create('users', function(Blueprint $table) {
        $table->increments('id');
        $table->string('email');
        $table->string('password');
        $table->timestamps();
    });
}

现在:

我想在用户投票时保留记录(因此他们不能再投票)。

我想我应该做某种M:N表。有点像这样:

| User ID | Poll ID   |
|---------|-----------|
|       1 |         5 |
|       1 |         7 |
|       1 |         8 |
|       3 |         5 |
|     ... |       ... |

但是Laravel使用了Eloquent ORM,我读过有belongsToManyhasMany这样的函数。所以,我想知道:

是否有任何约定或“聪明”的方法来设置这种“关系表”以简化开发和维护?

1 个答案:

答案 0 :(得分:2)

是的,您需要3个表才能获得多对多的关系。函数belongsToMany只是在说明如何获取数据。

如果您使用jeffrey way's laravel generator包,则可以使用以下命令创建链接表。

php artisan generate:pivot polls users

然后在你的模型中添加相应的

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

// user model
public function poll()
{
    return $this->belongsToMany('Poll');
}