モデルファクトリーを使用して、サイトの最初のテーブルでシードを設定しようとしています。手動で入力したシードは機能しますが、将来のテストやすべてのジャズのために、ファクトリを使用してシードできることを確認したかったのです。手動入力は問題なく機能しますが、モデル ファクトリを使用して作成すると、タイムスタンプのみを更新する 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();
}
}