如何在 Laravel 中的 2 类 之间传递变量
how to pass variable between 2 classes in Laravel
我有 class 定义从 xlsx 文件导入数据库的新闻 table。
App\Imports\NewsImport.php
<?php
namespace App\Imports;
use App\News;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class NewsImport implements ToCollection, WithHeadingRow
{
public function collection(Collection $rows)
{
News::truncate();
foreach ($rows as $row)
{
News::create([
'title' => $row['title'],
'fulltext' => $row['fulltext'],
]);
}
return $newsimported = $rows->count();
}
}
然后在 SeedController 中管理导入
App\Admin\Controllers\SeedController.php
<?php
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use App\Imports\NewsImport;
use Maatwebsite\Excel\Facades\Excel;
class SeedController extends Controller
{
public function index(Content $content)
{
Excel::import(new NewsImport, 'import/news.xlsm');
return $content
->title('Import & Export')
->description('Laravel excel');
}
}
我在进入种子页面时启动导入
$router->get('seed', 'SeedController@index')->name('admin.home');
代码运行正常,但我想在种子页面上显示已导入了多少新闻。
但我不知道如何使 $newsimported 在 SeedController 索引函数中可用。
有什么想法吗?
在不查看 Excel 库的实现细节的情况下,您可以尝试向您创建的导入 class 添加一个成员变量,然后在 Excel::import(...)
具有 运行:
class NewsImport implements ToCollection, WithHeadingRow
{
public $rowCount = null;
public function collection(Collection $rows)
{
News::truncate();
foreach ($rows as $row)
{
News::create([
'title' => $row['title'],
'fulltext' => $row['fulltext'],
]);
}
$this->rowCount = $rows->count();
}
}
那你在哪里运行Excel::import(...)
:
public function index(Content $content)
{
Excel::import($import = new NewsImport, 'import/news.xlsm');
$rowCount = $import->rowCount;
...
}
我有 class 定义从 xlsx 文件导入数据库的新闻 table。 App\Imports\NewsImport.php
<?php
namespace App\Imports;
use App\News;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class NewsImport implements ToCollection, WithHeadingRow
{
public function collection(Collection $rows)
{
News::truncate();
foreach ($rows as $row)
{
News::create([
'title' => $row['title'],
'fulltext' => $row['fulltext'],
]);
}
return $newsimported = $rows->count();
}
}
然后在 SeedController 中管理导入 App\Admin\Controllers\SeedController.php
<?php
namespace App\Admin\Controllers;
use App\Http\Controllers\Controller;
use Encore\Admin\Controllers\Dashboard;
use Encore\Admin\Layout\Column;
use Encore\Admin\Layout\Content;
use Encore\Admin\Layout\Row;
use App\Imports\NewsImport;
use Maatwebsite\Excel\Facades\Excel;
class SeedController extends Controller
{
public function index(Content $content)
{
Excel::import(new NewsImport, 'import/news.xlsm');
return $content
->title('Import & Export')
->description('Laravel excel');
}
}
我在进入种子页面时启动导入
$router->get('seed', 'SeedController@index')->name('admin.home');
代码运行正常,但我想在种子页面上显示已导入了多少新闻。 但我不知道如何使 $newsimported 在 SeedController 索引函数中可用。 有什么想法吗?
在不查看 Excel 库的实现细节的情况下,您可以尝试向您创建的导入 class 添加一个成员变量,然后在 Excel::import(...)
具有 运行:
class NewsImport implements ToCollection, WithHeadingRow
{
public $rowCount = null;
public function collection(Collection $rows)
{
News::truncate();
foreach ($rows as $row)
{
News::create([
'title' => $row['title'],
'fulltext' => $row['fulltext'],
]);
}
$this->rowCount = $rows->count();
}
}
那你在哪里运行Excel::import(...)
:
public function index(Content $content)
{
Excel::import($import = new NewsImport, 'import/news.xlsm');
$rowCount = $import->rowCount;
...
}