2015-12-10 1 views
0

У меня есть многие ко многим соотношением:Laravel многие ко многим соотношением: Integrity нарушения ограничения

table 1 books 
table 2 authors 
table 3 books_authors 
     book_id, author_id 

Проблема заключается в том, когда вставить новую запись, я получаю эту ошибку:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'book_id' cannot be null (SQL: insert into books_authors_relationship (author_id , book_id , created_at , updated_at) values (3, , 2015-12-10 17:17:28, 2015-12-10 17:17:28))

Автор модель

class Author extends Model 
{ 
    public function Book(){ 
     return $this->belongsToMany('App\Book','books_authors_relationship','book_id','author_id')->withTimestamps(); 
    } 
} 

Boo к модели

class Book extends Model 
    { 
    public function section(){ 
     return $this->belongsTo('App\Section','id'); 
    } 

     public function author(){ 
      return $this->belongsToMany('App\Author','books_authors_relationship','book_id','author_id')->withTimestamps(); 
     } 
    } 

Книга Контроллер

public function create($id) 
     { 
      $authors = Author::lists('first_name','id'); 
      $section_id = Section::find($id); 
      return view('books.create_book',compact('section_id','authors')); 

     } 
    public function store(storeBookRequest $request) 
     { 
      // dd($request->input('authors')); 
      $book_title = $request ->input('book_title'); 
      $book_edition = $request ->input('book_edition'); 
      $date_publication = $request ->input('date_publication'); 
      $book_isbn = $request ->input('book_isbn'); 
      $book_description = $request ->input('book_description'); 
      $file = $request ->file('image'); 
      $destinationPath = 'images'; 
      $filename = $file ->getClientOriginalName(); 
      $file ->move($destinationPath,$filename); 
      //join to author 
      $authorsIds = $request ->input('authors'); 


      $section_id = $request -> section_id; 


      $new_book = new Book; 
      $new_book ->book_title = $book_title; 
      $new_book ->book_edition = $book_edition; 
      $new_book ->date_publication = $date_publication; 
      $new_book ->book_isbn = $book_isbn; 
      $new_book ->book_description = $book_description; 
      $new_book ->image_name = $filename; 

      $new_book ->section_id = $section_id; 


      $new_book->author()->attach($authorsIds); 

      $new_book ->save(); 
      return redirect('admin_section'); 

     } 

ответ

1

Вы должны сохранить $new_book, прежде чем вы можете прикрепить авторов. Это связано с тем, что в новой книге нет первичного ключа. Первичный ключ устанавливается, когда запись действительно существует внутри базы данных.

Ваш код:

$new_book ->section_id = $section_id; 

$new_book->author()->attach($authorsIds); 

$new_book->save(); 

Должно быть:

$new_book ->section_id = $section_id; 

if ($new_book->save()) { 
    $new_book->author()->attach($authorsIds); 
} 
+0

спасибо Стив Бауман очень – fido

+0

не проблема! :) –

Смежные вопросы