如何在 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.phpPostsTableSeeder.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 语句在文件的开头。