2017-03-12 4 views
0

나는 4 개의 테이블을 가지고 있습니다. Book, Author, User, Rating 저자와 사용자 테이블은 Book 테이블과 많은 관계를 갖고 등급 테이블은 book과 user 테이블을 가진 외래 키를 가지고 있습니다. 5 저자와 사용자가 생성되었으므로 book_id와 book_id가 책과 등급 테이블에서 동일 할 곳에 책과 등급 테이블을 함께 만들고 싶습니다. 나는이 방법을 시도하고있다. 그러나 이것은 나에게 등급 공장에서의 오류를 준다! 변수 범위가 될 수 있습니다! 어떻게 해결할 수 있을까요?Laravel factory seeding error

'USER_ID'=> $ userRandom,

class BooksTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     factory(App\Book::class, 2)->create()->each(function ($book) { 
      $author = App\Author::all(); 
      $user = App\User::all(); 
      $userRandom = $user->random(); 

      factory(App\Rating::class)->create([ 
       'book_id' => $book->id, 
       'user_id' => $userRandom, 
      ]); 

      $book->authors()->save($author->random()); 
      $book->users()->save($userRandom); 
     }); 
    } 
} 
+0

당신은 또한 당신이보고있는 오류를 게시 할 수 있을까요? –

답변

0

1) 다음 사항을 확인합니다

'user_id' => $userRandom->id 
: 당신은 그것을 좋아 통과해야합니다 그렇지 않으면

'user_id' => $userRandom // keeps exact id. 


2) $fillable 속성이 Rating 모델로 정의되어 있는지 확인하십시오.

$fillable에 필드 이름을 정의하지 않은 경우 일부 배열 (assoc)을 만들고 전달할 수 없습니다.

또한 create 메소드를 사용하여 한 행에 새 모델을 저장할 수도 있습니다. 삽입 된 모델 인스턴스가 메소드에서 반환됩니다. 그러나 모든 Eloquent 모델은 기본적으로 대량 할당을 방지하므로 모델에 fillable 또는 guarded 속성을 지정해야합니다.

따라서 시작하려면 대량으로 할당 할 수있는 모델 특성을 정의해야합니다. 모델에서 $ fillable 속성을 사용하여이 작업을 수행 할 수 있습니다.

읽기에 대한 Mass Assignmenthttps://laravel.com/docs/5.4/eloquent