2017-09-18 9 views
0

私はLaravelで非常に新しいです!しかし、私は努力しています。ここで私はいくつかの助けを使うことができました。Laravel 5 - データを含む既存のテーブルに列と外部キーを追加する

私は投稿テーブルを持っています。私はユーザーテーブルを持っています。しかし、私はユーザIDにリンクする投稿テーブルに外部キーを追加するのを忘れていました。

usersテーブルの移行作成:私はどのように考えている

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class AlterTablePostsAddForeignUser extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::table('posts', function (Blueprint $table) { 
      // I HAVE NO IDEA WHAT TO DO NEXT 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     // 
    } 
} 

:私は新しい移行ファイルを作成している

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreatePostsTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('posts', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('title'); 
      $table->text('body'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::dropIfExists('posts'); 
    } 
} 

:ポストテーブルの移行を作成

use Illuminate\Support\Facades\Schema; 
use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateUsersTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('email')->unique(); 
      $table->string('password'); 
      $table->rememberToken(); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::dropIfExists('users'); 
    } 
} 

をここで "public function up()"メソッドを埋めるために!誰かが助けることができれば!大変感謝しています!

+0

https://stackoverflow.com/questions/44744733/laravel-add-foreign-key-on-existing-table-with-data –

答えて

0

は、あなたがあなたのcomposer.jsonファイルに教義/ DBAL依存関係を追加する必要があり、列を変更する前にdoctraine/dbalをインストールする必要があり、ドキュメントhere

を参照してください。教義DBALライブラリーは、列の現在の状態を判断し、列に指定された調整を行うために必要なSQLクエリを作成するために使用され、あなたはSOのため

Schema::table('posts', function (Blueprint $table) { 
    $table->integer('user_id')->unsigned()->change(); 

    $table->foreign('user_id')->references('id')->on('users'); 
}); 

change()方法を投稿し、私はthis上で見つけたもの試してみてくださいあなたはここにコメントを撃つために、これは動作しない場合は、この後のコラム

の変化構造は、職人コマンド

php artisan migrate 

を実行します! :)

+0

ok私は私の答えを更新しました更新された答えを試してください最初にdoctraine/dbalをインストールしてください私はあなたがあなたの問題を取り除くことを願って、答えに書いたことをしてください:) –

+0

その後、私はusers_id列がないというエラーが表示されます。だから私はup()メソッドを変更しました。 パブリック関数アップ(){ スキーマ::テーブル( 'ポスト'、関数(青写真$テーブル){ $卓上>整数( 'USER_ID') - >符号なし(); $ 卓上>外来( 'user_id') - >参照( 'id') - > on( 'users'); }); } しかし、私は制約違反を受けます。 – BC22

+0

また、 'php artisan migrate'コマンドを実行しても、私も答えを更新しました:) –

関連する問題