2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】orangehill/iseedが「No such file or directory」となる場合の対処

Last updated at Posted at 2022-07-12

orangehill/iseedとは

こちらのライブラリ
https://github.com/orangehill/iseed

DBデータからシーダーを生成してくれるというものです
データベースからLaravelのSeederを逆生成する

が、しかし、、

:cry: orangehill/iseedが動かない...!!!

Laravel7.x以前だと、
実行するとそんなディレクトリ無いよと言われてしまう。。:tired_face:

# php artisan iseed tests

   ErrorException  : file_put_contents(/var/www/html/test/database/seeders/TestsTableSeeder.php): failed to open stream: No such file or directory
   # ↑ そんなディレクトリ無いよ!僕は知らんへんよ! というエラー

:thinking: どうすれば?

Laravel8.xを境にシーダーディレクトリ名が変わったことが原因:open_mouth:

config配下に個別の設定ファイルを作ってあげればおk!

config/iseed.php
<?php
// vendor\orangehill\iseed\src\config\config.php の設定上書き
return array(
    'path' => '/database/seeds', // シーダーディレクトリ名を実態と合わせる
    'chunk_size' => 500
);

再実行

# php artisan iseed tests

File TestsTableSeeder.php already exist. Do you wish to override it? [yes|no] (yes/no) [no]:
> yes

Created a seed file from table tests

無事成功!!!

:mag: 原因判明~対応策発見まで

orangehill/iseedのソースを見ると、
シーダーディレクトリ名が特定バージョンから変わっていた :scream:
https://github.com/orangehill/iseed/commit/cc311c44dc2976ed7ebf9b9cf6308453c8149180



oh,no...でも流石に決め打ちにはなってないっしょ。。! :scream:
という仮説(願い)を胸に関連ソースを見ていると、
設定ファイルを別途設ければそちらに沿って動作するようになっていた!
https://github.com/orangehill/iseed/blob/master/src/Orangehill/Iseed/IseedServiceProvider.php#L66-L78

vendor\orangehill\iseed\src\Orangehill\Iseed\IseedServiceProvider.php
    /**
     * Register the package resources.
     *
     * @return void
     */
    protected function registerResources()
    {
        $userConfigFile    = app()->configPath().'/iseed.php';
        $packageConfigFile = __DIR__.'/../../config/config.php';
        $config            = $this->app['files']->getRequire($packageConfigFile);

        if (file_exists($userConfigFile)) { // アプリケーション側のconfigにiseed.phpがあればそれを読み込んでるっぽい
            $userConfig = $this->app['files']->getRequire($userConfigFile);
            $config     = array_replace_recursive($config, $userConfig);
        }

        $this->app['config']->set('iseed::config', $config);
    }

まとめ

  • ライブラリ側のエラーだったとしても、以外に簡単に解決できることもある:sunglasses:
  • ライブラリのソースも臆せずガリガリ読む!:smirk_cat:
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?