file_get_contents 在种子文件中不起作用,但在 laravel 5 中的路由文件中起作用

file_get_contents doesn't work in seed file but work in the routes file in laravel 5

我正在尝试使用旧 table.

的 JSON 输出在 laravel 中播种 table

当我尝试在种子文件中 file_get_contents('services.json') 时,我得到一个异常,该文件不存在,我也尝试使用 file_exists('services.json') 并返回 false 但是当我从路由文件中尝试过,它工作得很好,我的 table 种子。我的路线如下所示:

Route::get('test', function(){
    // return JWTAuth::parseToken()->getPayload()->get('username');

    Illuminate\Database\Eloquent\Model::unguard();

    // \Db::table('service')->truncate();

    $servicesDataFromOldDB = file_get_contents('../database/seeds/services.json');
    $servicesJson = json_decode($servicesDataFromOldDB);
    $services = Illuminate\Support\Collection::make($servicesJson);
    $services->each(function($service){
        App\Service::create([
            'id' => $service->id,
            'name' => $service->title,
            'description' => $service->desc,
            'category' => $service->cat,
            'type' => $service->type,
            'hours' => $service->hours,
            'price' => $service->price,
            'note' => $service->note,
            'devdays' => $service->devdays
        ]);
    });

    Illuminate\Database\Eloquent\Model::reguard();
});

我正在从相同的路径获取相同的文件,它能够获取它但不能在种子文件中获取。我错过了什么?

编辑

dd(file_exists(app_path() . '/database/seeds/services.json'));

连这个都返回false

此外,我在种子文件中做了 dd(__DIR__),这是正确的路径 /var/www/html/archive/database/seeds

使用__DIR__你可以获得当前文件所在的目录,然后使用realpath(),你可以获得完整的合格路径文件。

realpath(__DIR__ . '../database/seeds/services.json');

这意味着您可以设置相对于您正在使用的文件目录的路径,并确保它可以在代码中的任何其他位置运行。