Как я могу автоматически запустить все сеялки в папке database / seed в laravel?

-1

Вместо этого добавьте все новые файлы сеялок вручную один за другим в файл DatabaseSeeder.php, можно ли автоматически запускать все файлы в каталоге семян. Это возможно?

PS: Конечно (как упоминал @DissidentRage) в этом случае мы должны учитывать, что автоматизация таких процессов может сделать ваши сеялки независимыми и может вызвать много проблем.

  • 1
    Я не один из тех, кто даунтеров, но я представляю одну из причин, по которой люди не одобряют это потому, что автоматизация вашего списка сеялок означает, что вы рискуете вывести из строя взаимозависимых сеялок. Что-то, чтобы рассмотреть.
  • 0
    Спасибо @DissidentRage, хоть кто-то объяснил причину отрицательных голосов. И ты на самом деле прав. В целом, автоматизировать такие процессы - плохая вещь, но я подумал, что это в режиме разработки и фактически находится под контролем. Я имею в виду, когда вы используете seed, вы сбрасываете или воссоздаете свою базу данных, и вы можете просто удалить последний файл и обновить. Еще раз спасибо за ваш комментарий.
Теги:

1 ответ

4
Лучший ответ

Я столкнулся с этим вопросом и нашел этот способ как простой ответ.

Вы можете легко использовать scandir(), чтобы поместить все имена файлов в массив, а затем пропустить их, используя цикл foreach. А затем вызовите/запустите их все автоматически. Таким образом, вам не нужно добавлять новый класс к методу run() каждый раз, когда вы создаете (в основном с помощью php artisan make:seeder SomeTableSeeder) php artisan make:seeder SomeTableSeeder.

Итак, вместо этого:

// database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{

    public function run() {
        $this->call(UsersTableSeeder::class);
        $this->call(AnotherTableSeeder::class);
        ...
    }

}

Просто используйте:

// database/seeds/DatabaseSeeder.php
class DatabaseSeeder extends Seeder
{

    public function run(){
        $files_arr = scandir( dirname(__FILE__) ); //store filenames into $files_array
        foreach ($files as $key => $file){
            if ($file !== 'DatabaseSeeder.php' && $file[0] !== "." ){
                $this->call( explode('.', $file)[0] );
            }
        }
    }

} 

PS: Если вы хотите исключить файл сеялки из этого процесса автоматического запуска, просто добавьте одну точку в начало имени файла.

PS2: Если вы хотите изменить точку Excluder характер какой - либо причине. Просто добавьте желаемый символ исключения к выражениям if (например, для символа подчеркивания && $file[0] !== "_"). Не изменяйте $file[0] !== "." потому что он расширяет методы scandir(). и.. папок.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню