我试图让我的表格用初始数据播种,以便在Laravel 4.1中开始开发工作,但没有一个是播种。
例如,当我在下面运行php artisan db:seed
时,我会得到输出Seeded: ItemsTableSeeder
:
use Faker\Factory as Faker;
class ItemsTableSeeder extends Seeder {
public function run()
{
$f = Faker::create();
foreach(range(1, 10) as $index)
{
$price = round(rand(5, 100) + (rand(0, 99) / 10), 2);
$name = $f->sentence(6);
$shortname = explode(' ', $name, 3);
Item::create([
'sku' => strtoupper(str_random(16)),
'name' => $name,
'shortname' => implode(' ', array_slice($shortname, 0, 3)),
'stock' => rand(0, 100),
'price' => $price,
'cost' => round($price / rand(2, 3), 2),
'weight' => rand(0, 20) + (rand(1, 9) / 10),
'width' => rand(1, 20),
'height' => rand(1, 20),
'length' => rand(1, 20),
'size' => array_rand(['Standard', 'Oversized'], 1),
'enabled' => 'Y'
]);
}
}
}
但是,MySQL Workbench中的快速SELECT显示该表仍为空。我有这个设置在任何其他表之前播种,因为items
之后的表必须执行查找以从该表引用项目ID以创建自己的种子。当他们无法找到任何项目ID时,它会在此之后打破剩下的种子。
答案 0 :(得分:2)
detectEnvironment()
中的bootstrap/start.php
设置未正确覆盖,因此默认sqlite
文件中默认为app/config/database.php
。播种发生在默认的sqlite数据库文件中。
我曾使用dev
代替local
作为开发服务器的密钥。
答案 1 :(得分:0)
对于将来来到这里的用户:
您需要将要创建的每个种子类添加到DatabaseSeeder.php中,如下所示:
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// Add every single seeder class here
$this->call(UserSeeder::class);
$this->call(NewsSeeder::class);
}
}
只有在运行php artisan db:seed
时它们才会被调用。