Currently I'm trying to develope a package update system with the following workflow. I'm creating a package (.zip) with the following files:
- migrations (folder)
- migrationClass
- ..
 
- seeds
- seedfile
- ..
 
- package.xml
- UpdateInstructionSeeder.php
As a administrator I can upload this package in my admin control panel to update my database.
backend workflow:
- get data from package.xml (get available seeds and migrations)
- check if a migration/seeding is needed
- migrate (works fine)
- seed (fails)
So, as you can see I have some trouble with my seeding.
At first I tried to move (with Storage::move()) my seeds from the package seed folder to the database/seed/ directory. I tried to seed it with Artisan::call('db:seed','--class']); but a Class MyClass does not exist error appeared. I guessed that there are some problems with my autoloader, so I've tried to dump it with system('composer dump-autoload', $test);. The output of $test was 1 but the autoload_classmap wasn't updated.
Now I've added a UpdateInstructionSeeder.php which is available in my framework by default to fix the autoloader problem. After uploading my package, I'm using now Storage::get() and Storage::put() to update this with my needed seeds.
Now I'm adding seeds with Artisan::call('make:seeder', ['name' => $className]); ($className is the name of my seeds from the package) and update them with Storage::get() and Storage::put(), too.
Now I'm calling my seeder with Artisan::call('db:seed','--class' => ']);. Result: Class MyClass does not exist
Content:
package UpdateInstructionSeeder
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class UpdateInstructionSeeder extends Seeder
{
   /**
    * Run the database seeds.
    *
    * @return void
    */
   public function run()
   {
       Model::unguard();
       $this->call(DemoTableSeeder::class);
       Model::reguard();
   }
}
package DemoTableSeeder
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DemoTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();
        DB::table('demos')->insert([
            [
                'demoInt' => 1,
                'demoString' => "a"
            ],
            [
                'demoInt' => 11,
                'demoString' => "aa"
            ],
        ]);
        Model::reguard();
    }
}
I wasted now a lot of hours and I have absolutely no idea to solve this problem programatically.
via Chebli Mohamed
 
Aucun commentaire:
Enregistrer un commentaire