如何在 laravel 中保持种子文件的分离和清洁?
How to keep seeder files separate and clean in laravel?
我想将我的种子文件分开。例如 UsersTableSeeder.php
, PostsTableSeeder.php
然后在主种子文件中调用它们 (DatabaseSeeder.php
) :
示例:
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
}
}
usersTableSeeder.php :
<?php namespace App\Seeds;
use Illuminate\Database\Seeder;
use App\User;
class UserTableSeeder extends Seeder {
public function run()
{
//DB::table('users')->delete();
// user1
User::create(array(
'name' => 'ahmad',
'email' => 'ahmad@ahmad.com',
'password' => 'ahmad'
));
}
}
我的 UsersTableSeeder.php
和 PostsTableSeeder.php
文件在同一个
DatabaseSeeder.php
所在的目录。
我应该使用 psr-4
自动加载吗?怎么样?
您可能需要 运行 composer dump-autoload
。它对我有用。
附带说明一下,使用 PSR-4 进行种子和迁移会更干净(测试已经完成)。
Composer.json配置
composer.json
有一个 autoload
键来配置额外的自动加载路径。
你可以试试看:
"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
}
我的示例 composer.json
从您的播种机 classes 中删除命名空间行。它们现在被 classmap
个条目找到。
显式命名空间
或
保留命名空间并将它们添加到对 ->call()
的调用中。
无论你在哪里写一个 classname 你都可以用它的命名空间完全限定 class(应该是 \database\seeds\YourClass::class
,这取决于你的 composer.json
设置),或者添加一个 use 语句在文件的开头。
我想将我的种子文件分开。例如 UsersTableSeeder.php
, PostsTableSeeder.php
然后在主种子文件中调用它们 (DatabaseSeeder.php
) :
示例:
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(UsersTableSeeder::class);
$this->call(PostsTableSeeder::class);
}
}
usersTableSeeder.php :
<?php namespace App\Seeds;
use Illuminate\Database\Seeder;
use App\User;
class UserTableSeeder extends Seeder {
public function run()
{
//DB::table('users')->delete();
// user1
User::create(array(
'name' => 'ahmad',
'email' => 'ahmad@ahmad.com',
'password' => 'ahmad'
));
}
}
我的 UsersTableSeeder.php
和 PostsTableSeeder.php
文件在同一个
DatabaseSeeder.php
所在的目录。
我应该使用 psr-4
自动加载吗?怎么样?
您可能需要 运行 composer dump-autoload
。它对我有用。
附带说明一下,使用 PSR-4 进行种子和迁移会更干净(测试已经完成)。
Composer.json配置
composer.json
有一个 autoload
键来配置额外的自动加载路径。
你可以试试看:
"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
}
我的示例 composer.json
从您的播种机 classes 中删除命名空间行。它们现在被 classmap
个条目找到。
显式命名空间
或
保留命名空间并将它们添加到对 ->call()
的调用中。
无论你在哪里写一个 classname 你都可以用它的命名空间完全限定 class(应该是 \database\seeds\YourClass::class
,这取决于你的 composer.json
设置),或者添加一个 use 语句在文件的开头。