Laravel - 是否可以在 eloquent 中访问控制器功能?

Laravel - Is it possible to access controller function in eloquent?

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

问题是我需要根据视图中的 table 显示进行 excel 导出。我正在使用 phpspreadsheet 并在 eloquent 中编写代码。我想获取控制器中的所有变量并显示在我的 eloquent 中的 excel 代码中。可以吗?

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

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

我认为您可以将数据表与服务器端一起使用 false datatable with export button

没看到你说的代码,我的意思是将数据的计算和修改从控制器中移到模型中的静态方法中。

SomeController.php原文:

<?php

namespace App\Http\Controllers;

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 App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

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 App\Http\Controllers;

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

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