Laravel -有可能在eloquent中访问控制器功能吗?



所以我在视图中有一个表,其中所有的列和行都显示一个数学计算。每个计算都是在控制器中计算的,而不是存储在数据库中。

问题是我需要做一个excel导出基于表显示在视图中。我正在使用php电子表格和我写的代码雄辩。我想得到所有的变量在控制器和显示在excel代码在我雄辩。这可能吗?

仅供参考,所有数学代码的控制器是由以前的开发人员编写的,我被要求只添加导出excel功能,我不确定如何获得控制器内的所有方法。

我已经导出了excel,但只导出了数据库中存在的所有数据,这更容易,因为我只需要query = Model::all();

无需看到您正在谈论的代码,这就是我所说的将数据的计算和修改从控制器移动到模型中的静态方法的意思。

SomeController.php原始:

<?php
namespace AppHttpControllers;
class SomeController extends Controller
{
public function index()
{
$table_data = collect(SomeModel::all())->map(function($item) {
// your funky table data stuff.
return $item;
})->reduce(function($carry, $item) {
// your funky table data stuff.
return $carry + $item;
});
return view('some-table-view', $table_data);
}
}

将逻辑从控制器移到模型。

SomeModel.php

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class SomeModel extends Model
{
...
public static function tableData()
{
return collect(self::all())->map(function($item) {
// your funky table data stuff.
return $item;
})->reduce(function($carry, $item) {
// your funky table data stuff.
return $carry + $item;
});
}
}

你的新SomeController.php:

<?php
namespace AppHttpControllers;
class SomeController extends Controller
{
public function index()
{
$table_data = SomeModel::tableData();
return view('some-table-view', $table_data);
}
}

现在你可以在需要的地方调用SomeModel::tableData();

我认为你可以使用datatable与服务器端false带导出按钮的数据表

最新更新