在migrate laravel中的同一个表上创建多个外键

时间:2014-11-19 06:19:29

标签: laravel-4

    Schema::table('performance', function($table)
    {
        $table->foreign('song_id')
                ->references('id')
                ->on('songs')
                ->onDelete('cascade');
    });
    Schema::table('performance', function($table)
    {
        $talbe->foreign('artist_id')
                ->references('id')
                ->on('artists')
                ->onDelete('cascade');  
    });

我收到错误:"在非对象" 上调用成员函数foreign()。

2 个答案:

答案 0 :(得分:3)

您不能将多个命令用于外键。您只需要一个外键命令并组合您要定义的所有行。这是你应该运行的代码。

Schema::table('performance', function (Blueprint $table)
        {
            $table->unsignedInteger('song_id');
            $table->unsignedInteger('artist_id');
            $table->foreign(['song_id','artist_id'])->references(['id','id'])
                  ->on(['song','artists'])->onDelete(['cascade','cascade']);
        });

希望它有所帮助!

答案 1 :(得分:0)

检查对象名称从 $talbe $table

          Schema::table('performance', function (Blueprint $table)
            {
                $table->foreign('song_id')
                    ->references('id')
                    ->on('songs')
                    ->onDelete('cascade');
                $table->foreign('artist_id')
                    ->references('id')
                    ->on('artists')
                    ->onDelete('cascade');
            });

编辑:已更新!对于你的代码,$ table应该是Blueprint类的实例。这可能是造成这个问题的原因!