Посевной стол с использованием модели фабрики без сохранения

Я пытался настроить высев с первой таблицы на моем сайте, используя фабрику моделей. Семена, которые я ввел вручную, работают, но я хотел убедиться, что смогу посеять их, используя фабрику, для будущих тестов и всего этого джаза. Ручные записи работают просто отлично, но создание с использованием фабрики моделей приводит к появлению оператора SQL, который только обновляет временные метки. Он вставляет пустую строку (за исключением отметок времени), затем завершается неудачей из-за уникального ограничения на один из столбцов, поэтому он не может ввести другую пустую строку. Я не смог понять, почему он не генерирует правильные вставки, хотя на самом деле фабрика создает хороший набор данных. (Проверено распечаткой массива.) Любая помощь по устранению неполадок будет приветствоваться.

Модельный завод:

$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;
});

DatabaseSeeder.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();
}
}

0

Решение

https://stackoverflow.com/a/33716768/2666477 на самом деле был ответ. Я использую метод __construct, но я не делал ничего с атрибутами. Я добавил это, и все хорошо. Слава Богу! 🙂

1

Другие решения

created_at а также updated_at не использует время Unix. использование $faker->dateTime($max = 'now');

Laravel автоматически обновит эти значения при изменении моделей, поэтому, вероятно, происходит то, что не удается заполнить, но он уже создал запись и добавил updated_at а также created_at ценности

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector