0

モデルファクトリーを使用して、サイトの最初のテーブルでシードを設定しようとしています。手動で入力したシードは機能しますが、将来のテストやすべてのジャズのために、ファクトリを使用してシードできることを確認したかったのです。手動入力は問題なく機能しますが、モデル ファクトリを使用して作成すると、タイムスタンプのみを更新する SQL ステートメントが生成されます。空白行 (タイムスタンプを除く) を挿入すると、列の 1 つに一意の制約があるために失敗するため、別の空白行を入力できません。ファクトリが実際には適切なデータのセットを作成しているにもかかわらず、正しい挿入が生成されない理由を理解できませんでした。(アレイを印刷してテストしたとおりです。)これをトラブルシューティングする方法についてのヘルプは大歓迎です。

モデル工場:

$factory->define(App\Models\Site::class, function (Faker\Generator $faker) {
    $site = new App\Models\Site;
    $siteTypes = array_keys($site->siteTypes);
    $return = [
        'site_name' => $faker->word
        , 'site_url' => $faker->url
        , 'site_type' => $faker->randomElement($siteTypes)
        , 'is_active' => round(rand(0,1))
        , 'created_at' => $faker->unixTime
        , 'updated_at' => $faker->unixTime
    ];
    return $return;
});

データベースシーダー.php:

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\Models\Site;

class DatabaseSeeder extends Seeder
{
    public function run() {
        Model::unguard();
        DB::delete('delete from sites');
        DB::statement('alter table sites auto_increment = 1');
        $this->call(SiteTableSeeder::class);
        DB::statement('alter table sites auto_increment = 10000');
        Model::reguard();
    }
}

SiteTableSeeder:

class SiteTableSeeder extends Seeder
{
    public function run()
    {
        <snip out the other manual seeds>
        DB::table('sites')->insert([
            'site_id' => 9999,
            'site_name' => 'Generic Online Site',
            'site_url' => 'http://generic.nextworth.com',
            'site_type' => 'online',
            'is_active' => 1,
        ]);
        factory('App\Models\Site', 5)->create();
    }
}
4

2 に答える 2

0

created_atUNIX時間を使用しupdated_atません。使用する$faker->dateTime($max = 'now');

モデルが変更されると、Laravel はこれらの値を自動的に更新します。そのため、おそらくシード処理は失敗しますが、すでにレコードが作成され、値updated_atcreated_at値が追加されています。

于 2015-11-24T02:57:30.517 に答える