Di dalam QuickAdminpanel, kami memiliki modul yang disebut CSV Impor. Beberapa pelanggan bertanya cara menyesuaikannya, seperti cara menangani banyak hubungan yang akan diimpor, atau memodifikasi beberapa bidang sebelum impor yang sebenarnya. Mari kita lihat.
Contoh: Mengimpor Pengguna Default
Mari kita coba mengimpor CSV Pengguna ini: Kami hanya memiliki nama, email, dan kata sandi default.
Ini adalah tabel DB Laravel default kami pengguna.

Secara default, impor kami berfungsi tanpa menulis kode khusus apa pun, hanya dari modul QuickAdminPanel yang dihasilkan, lihat video:
Tapi kami memiliki dua masalah dengan itu:
- Pengguna baru tidak mendapatkan peran Ditugaskan, itu harus disimpan role_user Tabel pivot
- Kata sandi tidak dienkripsi dan disimpan sebagai teks biasa (lihat di bawah)

Bagaimana cara menyesuaikan keduanya?
Langkah 1. Salin sifat-pasta menjadi pengontrol
Semua “sihir” dalam impor CSV dilakukan dalam satu file: APP/HTTP/CONTROLER/TRAITS/CSVIMPORTTRAIT.php.
Dan kemudian termasuk dalam semua pengontrol di mana Anda perlu impor. Menyukai, APP/HTTP/CONTROLER/ADMIN/USERSCONTROLLER.PHP:
namespace App\Http\Controllers\Admin;
// ...
use App\Http\Controllers\Traits\CsvImportTrait;
class UsersController extends Controller
{
use CsvImportTrait;
public function index()
{
// ...
Ini adalah sifat yang sama untuk semua pengontrol. Jadi untuk menjadikannya individual untuk pengguna, kita perlu menyalin kode sifat ke pengontrol. Dan juga tambahkan beberapa menggunakan pernyataan.
Diperbarui APP/HTTP/CONTROLER/ADMIN/USERSCONTROLLER.PHP:
// ...
use Illuminate\Support\Facades\File;
use Illuminate\Support\Str;
class UsersController extends Controller
{
// ...
public function processCsvImport(Request $request)
{
try {
$filename = $request->input('filename', false);
$path = storage_path('app/csv_import/' . $filename);
$hasHeader = $request->input('hasHeader', false);
$fields = $request->input('fields', false);
$fields = array_flip(array_filter($fields));
$modelName = $request->input('modelName', false);
$model = "App\\" . $modelName;
$reader = new \SpreadsheetReader($path);
$insert = [];
foreach ($reader as $key => $row) {
if ($hasHeader && $key == 0) {
continue;
}
$tmp = [];
foreach ($fields as $header => $k) {
if (isset($row[$k])) {
$tmp[$header] = $row[$k];
}
}
if (count($tmp) > 0) {
$insert[] = $tmp;
}
}
$for_insert = array_chunk($insert, 100);
foreach ($for_insert as $insert_item) {
$model::insert($insert_item);
}
$rows = count($insert);
$table = Str::plural($modelName);
File::delete($path);
session()->flash('message', trans('global.app_imported_rows_to_table', ['rows' => $rows, 'table' => $table]));
return redirect($request->input("redirect"));
} catch (\Exception $ex) {
throw $ex;
}
}
public function parseCsvImport(Request $request)
{
$file = $request->file('csv_file');
$request->validate([
'csv_file' => 'mimes:csv,txt',
]);
$path = $file->path();
$hasHeader = $request->input('header', false) ? true : false;
$reader = new \SpreadsheetReader($path);
$headers = $reader->current();
$lines = [];
$lines[] = $reader->next();
$lines[] = $reader->next();
$filename = Str::random(10) . '.csv';
$file->storeAs('csv_import', $filename);
$modelName = $request->input('model', false);
$fullModelName = "App\\" . $modelName;
$model = new $fullModelName();
$fillables = $model->getFillable();
$redirect = url()->previous();
$routeName="admin." . strtolower(Str::plural(Str::kebab($modelName))) . '.processCsvImport';
return view('csvImport.parseInput', compact('headers', 'filename', 'fillables', 'hasHeader', 'modelName', 'lines', 'redirect', 'routeName'));
}
}
Langkah 2. Ubah Sisipkan untuk Membuat dan Menetapkan Peran
Bagian utama di mana catatan dibuat ada di sini ProcessCsvimport () metode:
$for_insert = array_chunk($insert, 100);
foreach ($for_insert as $insert_item) {
$model::insert($insert_item);
}
Mari kita ubah itu menjadi fasih membuat dan kemudian menggunakan hubungan banyak-ke-banyak untuk melampirkan peran.
Beginilah hubungan kita didefinisikan app/user.php model:
public function roles()
{
return $this->belongsToMany(Role::class);
}
Jadi ini adalah bagian baru kami di Controller:
// We use $insert instead of $for_insert and not doing chunk anymore
foreach ($insert as $insert_item) {
$user = $model::create($insert_item);
$user->roles()->attach(1);
}
Langkah 3. Mengenkripsi kata sandi
Untuk bidang kata sandi, atau untuk manipulasi apa pun, kami dapat menambahkan apa yang disebut “mutator” yang akan mengatur nilai bidang ke yang benar.
Faktanya, untuk app/user.php Model Kami telah mengaturnya secara default:
public function setPasswordAttribute($input)
{
if ($input) {
$this->attributes['password'] = app('hash')->needsRehash($input) ? Hash::make($input) : $input;
}
}
Saat kami mengubahnya ::menyisipkan() bagian dari ::membuat() Bagian, semua “sihir” yang fasih secara otomatis dihidupkan, termasuk mutator.
Jadi, jika Anda memerlukan manipulasi apa pun sebelum menyimpan data, ini adalah cara Anda.
Hasil akhir dari impor:

News
Berita
News Flash
Blog
Technology
Sports
Sport
Football
Tips
Finance
Berita Terkini
Berita Terbaru
Berita Kekinian
News
Berita Terkini
Olahraga
Pasang Internet Myrepublic
Jasa Import China
Jasa Import Door to Door
Gaming center adalah sebuah tempat atau fasilitas yang menyediakan berbagai perangkat dan layanan untuk bermain video game, baik di PC, konsol, maupun mesin arcade. Gaming center ini bisa dikunjungi oleh siapa saja yang ingin bermain game secara individu atau bersama teman-teman. Beberapa gaming center juga sering digunakan sebagai lokasi turnamen game atau esports.
Comments are closed, but trackbacks and pingbacks are open.