أنا فقط أتساءل عما إذا كان هناك أي طريقة للتواصل مع وحدة التحكم الخاصة بي من خلال طريقة الاستيراد المطبقة. لقد حاولت إعادة مجموعة بيانات إلى وحدة التحكم لكنها لم تنجح. لم أر أي ذكر لهذا ...
أعلم أنه يمكنني استخدام toCollection وإرجاع الاستيراد بالكامل إلى مجموعة في وحدة التحكم ولكني قلق بشأن تحقيق أداء ناجح.
ضع البيانات التي تم استيرادها في خاصية فئة لكائن الاستيراد الخاص بك وقم بعمل أداة تجميع لها يمكنك الاتصال بها بعد انتهاء الاستيراد في وحدة التحكم الخاصة بك.
يجب أن أفتقد شيئًا ما ، دعني أكون أكثر تحديدًا.
إذن ، ها هي مكالمة الاستيراد الخاصة بي في وحدة التحكم الخاصة بي:
$import = Excel::import(new SalesImport, 'imports/salesdata.xlsx');
class SalesImport implements ToCollection
{
public function collection(Collection $rows)
{
.... lots of other stuff ....
$this->data = $data;
}
من الواضح لي أن هذه البيانات لا تجعلها تعود إلى كائن الاستيراد $ الخاص بي في وحدة التحكم ، لكني أعتقد أنني بحاجة إلى تطبيق شيء آخر غير ToCollection هنا؟
class SalesImport implements ToCollection
{
public $data;
public function collection(Collection $rows)
{
.... lots of other stuff ....
$this->data = $data;
}
$import = new SalesImport;
Excel::import($import, 'imports/salesdata.xlsx');
dd($import->data);
class SalesImport implements ToCollection { public $data; public function collection(Collection $rows) { .... lots of other stuff .... $this->data = $data; }
$import = new SalesImport; Excel::import($import, 'imports/salesdata.xlsx'); dd($import->data);
رائع!
class SalesImport implements ToCollection { public $data; public function collection(Collection $rows) { .... lots of other stuff .... $this->data = $data; }
$import = new SalesImport; Excel::import($import, 'imports/salesdata.xlsx'); dd($import->data);
هل يمكنك من فضلك تعيين ذلك في https://docs.laravel-excel.com/3.1/imports/collection.html أو في مكان آخر في التوثيق؟ لقد فقدت الكثير من الوقت في البحث عن ذلك.
يوجد مثال مشابه في المستندات لفترة من الوقت: https://docs.laravel-excel.com/3.1/architecture/objects.html#getters
مكتبة رائعة ، هذا المثال يعمل بشكل رائع لورقة واحدة.
هل لديك أي نصائح حول تنفيذ الاستيراد باستخدام WithMultipleSheets؟ كيف يمكنني الحصول على عدد الصفوف؟
على CRUD الذي أحصل عليه: استدعاء طريقة غير محددة MaatwebsiteExcelExcel :: getRowCount ()
أنا أستخدم فئة للاتصال بمستورد ورقة المواصفات:
class ExcelSampleSheetsImport implements WithMultipleSheets
{
protected $params;
public function __construct($params)
{
$this->params = $params;
}
public function sheets(): array
{
return [
'Sheet to import' => new ExcelSampleImport($this->params)
];
}
}
في فئة ExcelSampleImport ، قمت بتنفيذ العداد كما هو محدد في المستندات.
كيف يمكنني القيام بذلك ولكن بأوراق متعددة؟
فئة الاستيراد
class CommunityImport implements WithMultipleSheets
{
use WithConditionalSheets;
public function conditionalSheets(): array
{
return [
0 => new FirstSheetCommunityImport(),
1 => new SecondSheetCommunityImport(),
];
}
}
فئة للورقة الأولى
class FirstSheetCommunityImport implements ToCollection
{
public $id;
public function collection(Collection $rows)
{
$i=0;
foreach ($rows as $row)
{
if($i==0){
$this->id = $row[0];
}
$i++;
}
}
}
وحدة تحكم الصفحة - كيف يمكنني الوصول إلى المعرف من فئة FirstSheetCommunityImport؟
public function import()
{
$import = new CommunityImport();
$import->onlySheets(0);
Excel::import($import, storage_path('app/xls/').'comunidad-import.xlsx');
}
للوصول إلى هذا المعرّف من FirstSheetCommunityClass كان مشكلة بالنسبة لي لكنني استخدمت ذاكرة التخزين المؤقت Laravel لتخزين مجموعتي لمدة 10 دقائق ثم الوصول إليها من وحدة التحكم باستخدام واجهة ذاكرة التخزين المؤقت
هنا هو رأيي في الحصول على أوراق متعددة. استخدام ذاكرة التخزين المؤقت لهذا ليس فكرة جيدة في رأيي ...
<?php
// VendorsExtraDataImportSheet.php:
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class VendorsExtraDataImportSheet implements ToCollection
{
public $count = 0;
public function collection(Collection $rows)
{
$this->count++;
}
}
<?php
// VendorsExtraDataImport.php
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithConditionalSheets;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class VendorsExtraDataImport implements ToCollection, WithMultipleSheets
{
use WithConditionalSheets;
public const SHEET_TO_IMPORT = 'Example data input';
public $sheet;
public function collection(Collection $rows)
{
}
public function conditionalSheets(): array
{
if (!$this->sheet) {
$this->sheet = new VendorsExtraDataImportSheet;
}
return [
self::SHEET_TO_IMPORT => $this->sheet,
];
}
}
<?php
// ...
// PageController.php
public function import()
{
$import = new VendorsExtraDataImport();
$import->onlySheets(VendorsExtraDataImport::SHEET_TO_IMPORT);
Excel::import($import, resource_path('data/vendors.xlsx'));
dd($import->sheet->count);
}
// ...
التعليق الأكثر فائدة