2015-03-04 10 views
4

У меня есть две таблицы Пользователи и сообщения. вот мой Пользователь таблица миграции файла:Laravel 5 вставка строки с внешним ключом

public function up() 
{ 
    Schema::create('users', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('email')->unique(); 
     $table->string('password', 60); 
     $table->string('password_temp',60); 
     $table->integer('active'); 
     $table->string('code',60); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 
} 

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

и вот мой файл миграции сообщений таблица

public function up() 
{ 
    Schema::create('posts', function(Blueprint $table){ 

     $table->increments('id'); 
     $table->string('title'); 
     $table->text('body'); 
     $table->integer('user_id')->unsigned(); 
     $table->string('slug'); 
     $table->timestamps(); 


    }); 

    Schema::table('posts',function(Blueprint $table){ 

     $table->foreign('user_id') 
      ->references('id') 
      ->on('users') 
      ->onDelete('cascade') 
      ->onUpdate('cascade'); 

    }); 
} 

AdminPostsController расширяет контроллер { общественные функции магазина (Request $ запрос) {

$validator = Validator::make($request->all(),Post::$rules); 


    if($validator->passes()){ 



     $post = new Post(); 

     $post->title = $request->get('title'); 
     $post->body = $request->get('body'); 
     $post->user_id = $request->get('id'); 
     $post->slug = Slug::generateSlug($request->get('title')); 

     $post->save(); 

     return Redirect::route('admin.posts.index'); 
    } 
    else{ 
      return Redirect::route('admin.posts.create')->withErrors($validator)->withInput(); 
    } 

} 

Каждый раз, когда я вставить новый пост, я всегда вижу следующее сообщение об ошибке «QueryException in Connection.php line 614: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ( блог . сообщений , CONSTRAINT posts_user_id_foreign FOREIGN KEY ( user_id ) REFERENCES пользователей ( ID ) ON DELETE CASCADE ON UPDATE CASCADE)» я хотел бы знать, что я делаю неправильно.

+0

Похоже, вы не ввели сообщение с действительным 'user_id'. Можете ли вы показать нам, как вы создаете новый пост? – lukasgeiter

+0

Я просто добавил функцию магазина @lukasgeiter –

+0

Вместо того, чтобы устанавливать 'user_id' и' slug' в '$ post', вы делаете это на' $ request' – lukasgeiter

ответ

7

Этот код создает ограничение, так что ваше сообщение ДОЛЖНО ссылаться на действительный идентификатор пользователя. Поле user_id должно содержать существующий ключ в поле идентификатора таблицы пользователей.

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

Попробуйте связать пользователя перед сохранением нового сообщения.

$post  = new Post(); 
$post->title = $request->get('title'); 
$post->body = $request->get('body'); 

$post->user()->associate($user); 
$post->save(); 

Если предположить, что у вас есть действительная модель пользователя загружается на $user варе и что вы установили связь между пользователями и постами на моделях.

+0

Я сделал чары. Я думаю, что проблема заключается в $ request-> get ('id') –