2014-01-17 2 views
4

faker 클래스를 사용하여 데이터베이스를 작성하는 데 도움이됩니다. DatabaseSeeder이laravel에 시드 할 때 대입 지정 오류

<?php 

class DatabaseSeeder extends Seeder 
{ 
public function run() 
{ 
    Eloquent::unguard(); 

    $tables = [ 
     'users', 
     'posts', 
    ]; 

    foreach ($tables as $table) { 
     DB::table($table)->truncate(); 
    } 

    $this->call('UsersTableSeeder'); 
    $this->call('PostsTableSeeder'); 
    } 
} 

과 UsersTableSeeder

<?php 

class UsersTableSeeder extends Seeder { 

public function run() 
{ 
    $faker = Faker\Factory::create(); 

     for($i=0 ; $i<50 ; $i++) { 
     $user = User::create([ 
      'first_name'   => $faker->firstName, 
      'surname'   => $faker->lastName, 
      'email'    => $faker->email, 
      'username'   => $faker->userName, 
      'bio'    => $faker->sentences, 
      'bio_html'   => $faker->sentences, 
      'wesbite'   => $faker->url, 
      'twitter'   => $faker->word, 
     ]); 
    } 
    } 
} 

나는 시도하고이 테이블 종자 때 터미널에서 다음과 같은 오류를 얻고있다처럼 보인다.

[Illuminate\Database\Eloquent\MassAssignmentException] 
first_name  

내가하려고하면 종자 나는

[ErrorException]                  
preg_replace(): Parameter mismatch, pattern is a string while replacement is an array 

내가 Eloquent::unguard(); 포함 생각이이 오류를 중지 얻을 모두? Laravel의 최신 버전을 실행하고 있습니다.

답변

2

모델에 보호 된 필드의 빈 배열을 정의 할 수 있습니다.

class User extends Eloquent 
{ 
    protected $guarded = []; 
} 
+0

왜 'DatabaseSeeder' 클래스가'Eloquent :: unguarded()'를 호출하면이 솔루션이 도움이 될까요? – mike

+0

그것은 나를 도왔습니다. 단일 시드를 사용하여 동일한 오류가 발생했습니다. – klauskpm

11

faker->sentences()faker->paragraphs() 반환 배열와 클래스는 문자열을받을 것으로 기대하고있다.

public function run() 
{ 
    Eloquent::unguard(); 

    $this->call('UsersTableSeeder'); 
    $this->call('PostsTableSeeder'); 
} 

:

당신은 faker->text()를 사용할 수 있습니다 또는 당신은 당신이 잘

implode(" ",$faker->sentences()); 
+1

여기에 어둠이 몰려 와서 이것이 내 해결책이었습니다! 감사! –

2

를 사용할 수 있습니다, 난 그냥 같이, 당신의 DatabaseSeeder.php에서 간단하게 할 필요가 있다고 생각 UsersTableSeeder.php

<?php 

use Faker\Factory as Faker; 

class UsersTableSeeder extends Seeder { 

    public function run() 
    { 
    $faker = Faker::create(); 

    for($i=0 ; $i<50 ; $i++) { 
     $user = User::create([ 
     'first_name'   => $faker->firstName, // try using str_random(10) 
     'surname'   => $faker->lastName, // try using str_random(20) 
     'email'    => $faker->email, 
     'username'   => $faker->userName, // $faker->unique()->userName 
     'bio'    => $faker->sentences, 
     'bio_html'   => $faker->sentences, 
     'wesbite'   => $faker->url, 
     'twitter'   => $faker->word, 
     ]); 
    } 
    } 
} 
다음과 같이
을 입력하십시오.

그리고, 모델, User.php에 추가 :

protected $guarded = []; 

내가 여기 실행하고 모두 일 :

php artisan db:seed 
php artisan db:seed --class=UsersTableSeeder 

나는이 같은 작곡가에 laravel와 사기꾼을 구성 :

"require": { 
    "laravel/framework": "4.2.*", 
    "fzaninotto/faker": "dev-master" 
}, 

희망이 있습니다.

관련 문제