1. Go to this page and download the library: Download coreproc/nova-data-sync library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
coreproc / nova-data-sync example snippets
public function tools()
{
return [
// ...
new \Coreproc\NovaDataSync\NovaDataSync(),
];
}
namespace App\Nova\Imports\TestImport;
use Coreproc\NovaDataSync\Import\Jobs\ImportProcessor;use Illuminate\Support\Facades\Log;
class TestImportProcessor extends ImportProcessor
{
public static function expectedHeaders(): array
{
return ['field1', 'field2'];
}
protected function rules(array $row, int $rowIndex): array
{
// Use Laravel validation rules to validate the values in each row.
return [
'field1' => [' return 100;
}
}
namespace App\Nova\Imports\TestImport;
use Coreproc\NovaDataSync\Import\Nova\Actions\ImportNovaAction;
class TestImportAction extends ImportNovaAction
{
// A sample processor will be shown below
public string $processor = TestImportProcessor::class;
}
public function actions(Request $request)
{
return [
new TestImportAction(),
];
}
use Coreproc\NovaDataSync\Import\Actions\ImportAction;
// Get the file from s3
$file = Storage::disk('s3')->get('file-for-import.csv');
// Put it in your local storage
Storage::disk('local')->put('file-for-import.csv', $file);
// Get the filepath of the file we just saved
$filePath = Storage::disk('local')->path('file-for-import.csv');
try {
// Use ImportAction::make() to dispatch the jobs necessary to handle the import
ImportAction::make(TestImportProcessor::class, $filePath);
} catch (Exception $e) {
// Handle exception
\Log::error($e->getMessage());
}
namespace App\Nova\Exports;
use App\Models\Product;
use Coreproc\NovaDataSync\Export\Jobs\ExportProcessor;
use Illuminate\Contracts\Database\Query\Builder;
class UserExportProcessor extends ExportProcessor
{
public function query(): Builder
{
return Product::query()->with('productCategory');
}
}
namespace App\Nova\Exports;
use App\Models\Product;
use Coreproc\NovaDataSync\Export\Jobs\ExportProcessor;
use Illuminate\Contracts\Database\Query\Builder;
class UserExportProcessor extends ExportProcessor
{
public function query(): Builder
{
return Product::query()->with('productCategory');
}
public function formatRow($row): array
{
return [
'name' => $row->name,
'product_category' => $row->productCategory->name ?? null,
'price' => $row->price,
];
}
}
namespace App\Nova\Exports;
use Coreproc\NovaDataSync\Export\Jobs\ExportProcessor;
use DB;
use Illuminate\Contracts\Database\Query\Builder;
class UserExportProcessor extends ExportProcessor
{
public function query(): Builder
{
return \DB::query()->from('users')
->select([
'id',
'email',
]);
}
}
namespace App\Nova\Exports\Products;
use App\Models\Product;
use Coreproc\NovaDataSync\Export\Jobs\ExportProcessor;
use Illuminate\Contracts\Database\Query\Builder;
class ProductExportProcessor extends ExportProcessor
{
public function __construct(public string $startDate, public string $endDate)
{
// Always remember to call the parent constructor when overriding the constructor
parent::__construct();
}
public function query(): Builder
{
$startDate = Carbon::make($this->startDate)->startOfDay();
$endDate = Carbon::make($this->endDate)->endOfDay();
return Product::query()
->whereBetween('created_at', [$startDate, $endDate])
->with('productCategory');
}
public function formatRow($row): array
{
return [
'name' => $row->name,
'product cat' => $row->productCategory->name ?? null,
'price' => $row->price,
];
}
public static function queueName(): string
{
return 'custom-queue-name'; // Default is whatever is set in the config
}
public function allowFailures(): bool
{
return true; // Default is whatever is set in the config
}
public function disk(): string
{
return 'custom-disk-name'; // Default is whatever is set in the config
}
public static function chunkSize(): int
{
return 100; // Default is whatever is set in the config
}
}
namespace App\Nova\Exports;
use Coreproc\NovaDataSync\Export\Nova\Action\ExportNovaAction;
class ProductExportAction extends ExportNovaAction
{
protected function processor(ActionFields $fields, Collection $models): ExportProcessor
{
return new ProductExportProcessor();
}
}
namespace App\Nova\Exports;
use Coreproc\NovaDataSync\Export\Nova\Action\ExportNovaAction;
class ProductExportAction extends ExportNovaAction
{
protected function processor(ActionFields $fields, Collection $models): ExportProcessor
{
return new ProductExportProcessor($fields->get('start_date'), $fields->get('end_date'));
}
public function fields(NovaRequest $request): array
{
return [
Date::make('Start Date')->
public function actions(Request $request)
{
return [
new UserExportAction(),
];
}
'nova_resources' => [
/**
* Since users are defined as morphable, we need to specify the Nova resource
* associated with the users we want.
*/
'users' => [
\App\Nova\User::class,
],
],