如何在laravel 4中建立N:N关系

时间:2014-07-07 18:44:14

标签: laravel

任何人都可以帮我建立contact_user吗?我需要在这个表中创建两个主键,但是我在artisan中运行它但是不起作用。有人怎么解决这个问题?

public function up()
{
    Schema::create('users', function($table){
        $table->increments('id');
        $table->string('name',50);
        $table->date('born');
        $table->string('email');
        $table->timestamps();
    }); 

    Schema::create('contact', function ($t){
        $t->increments('id');
        $t->string('email');
    }); 

    Schema::create('contact_user', function ($t){
        $t->integer('id_user')->primary();
        $t->integer('id_contact')->primary();
        $t->foreign('fk_user')->references('id_user')->on('users')->onDelete('cascade')->onUpdate('cascade');
        $t->foreign('fk_contact')->references('id_contact')->on('contact')->onDelete('cascade')->onUpdate('cascade');
    });
}

1 个答案:

答案 0 :(得分:1)

这应该有效,但未经过测试。其中大部分是从文档中提取出来的,而且非常直接。我已经改变了一些列以匹配Laravel期望的命名约定。这使得在建立关系等时生活更加轻松......

查看以下内容:

public function up()
{
    Schema::create('users', function($table) {
        $table->increments('id');
        $table->string('name',50);
        $table->date('born');
        $table->string('email');
        $table->timestamps();
    }); 

    Schema::create('contacts', function ($t) {
        $t->increments('id');
        $t->string('email');
    }); 

    Schema::create('contact_user', function ($t) {
        $t->integer('user_id')->unsigned();
        $t->integer('contact_id')->unsigned();
        $t->primary(array('user_id', 'contact_id'));
        $t->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
        $t->foreign('contact_id')->references('id')->on('contacts')->onDelete('cascade')->onUpdate('cascade');
    });
}