Я пишу много команд импорта в Laravel 5.8, которые все принимают один и тот же аргумент и импортируют часть данных. Например, у меня есть ImportUsersCommand.php
, ImportFilesCommand.php
и ImportNotesCommand.php
, все из которых принимают аргумент location_id
(есть намного больше команд, но я пытаюсь сделать этот пример простым). Все сценарии подключаются к внешней базе данных сервера MS SQL, указывающей c в это местоположение, а затем запускают некоторый код для импорта данных в базу данных MySQL.
Я заметил, что я многократное повторение одного и того же, и я хотел бы изменить его на что-то вроде BaseImportCommand.php
.
Пример команды - ImportUsersCommand. php (что у меня сейчас есть)
<?php
namespace App\Console\Commands\Imports;
use Illuminate\Console\Command;
// Models
use App\Models\Location;
use App\Models\Files;
use App\Models\Notes;
use App\Models\User;
// ... and the list continues with many more models!
use DB;
use Hash;
use Schema;
use Carbon\Carbon;
// ... and the list continues with many more!
class ImportUsers extends Command
{
protected $signature = 'import:users {location_id}';
protected $description = 'Import users from another data source';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$this->info($this->description);
ini_set('memory_limit', '4000M');
$location = Location::findOrFail($this->argument('location_id'));
Config::set("database.connections.chirotouch", [
'driver' => env('SQLSERVER_DB_CONNECTION'),
'host' => env('SQLSERVER_DB_HOST'),
'port' => env('SQLSERVER_DB_PORT'),
'database' => 'location_'.$location->id,
'username' => env('SQLSERVER_DB_USERNAME'),
'password' => env('SQLSERVER_DB_PASSWORD'),
]);
// ... and the code continues just for setting up the command...
// Only after about 100 lines of code do we actually get to the
// specifics of what this particular command does.
foreach ($location->users as $user) {
// Do what I need to do
}
}
}
Что бы я хотел, чтобы ImportUsersCommand. php выглядел как
<?php
namespace App\Console\Commands\Imports;
use App\Console\Commands\Imports\BaseImportCommand;
class ImportUsers extends BaseImportCommand
{
protected $signature = 'import:users {location_id}';
protected $description = 'Import users from another data source';
public function __construct()
{
parent::__construct();
}
public function handle()
{
foreach ($location->users as $user) {
// Do what I need to do
}
}
}
Но у меня возникают проблемы при составлении моего BaseImportCommand.php
. Как извлечь операторы use
, соединение с внешней БД, операторы $this-info()
, параметры конфигурации, такие как увеличение лимита памяти, и присвоение переменной $location
другому файлу, который можно использовать повторно для каждая команда импорта?
Любая помощь будет принята с благодарностью!