如何在我的模型中使用临时表来列出带背包的laravel?

t40tm48m  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(140)

我需要制作一个报表,从彼此不直接相关的不同表中获取信息。我认为在创建指向之前创建的临时表的模型时,我将从不同表中插入信息(只有一些类似的特定字段,例如:概念、总数)。
我想知道是否可以使用背包列表提供的过滤器和工具。我应该在什么时候创建临时表,以便模型能够找到它?
我做了一个快速测试,在语句之前添加了创建临时表的代码:

CRUD::setModel(\App\Models\Bank::class);

在我的设置中,但它没有工作。
我已经饱和了,在花很多时间在这上面之前,我想知道这是否可能?或者如果有人有任何建议。非常感谢。
更新
我在我的模型中创建了一个函数,它删除临时表(如果它存在),创建带有必要字段的临时表并插入记录,

$dropTempTables = DB::unprepared(
            DB::raw("
                DROP TABLE IF EXISTS bancos ;
            ")
        );

        $createTempTables  = DB::unprepared(DB::raw("
            CREATE TEMPORARY TABLE if not exists bancos (
                id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
                nombre VARCHAR(20) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
                id_orden_trabajo BIGINT(20) UNSIGNED  NULL DEFAULT NULL,
                id_orden_compra BIGINT(20) UNSIGNED  NULL DEFAULT NULL,
                fecha_pago DATE NULL DEFAULT NULL,
                total DECIMAL(8,2) NULL DEFAULT NULL,
                PRIMARY KEY (id) USING BTREE
            );
        "));

        if($createTempTables){
            DB::insert('insert into bancos (nombre, id_orden_trabajo, id_orden_compra, fecha_pago, total) values (?,?, ?, ?, ?)', ['caja', 10, 20, '2022-01-11', 20]);
            DB::insert('insert into bancos (nombre, id_orden_trabajo, id_orden_compra, fecha_pago, total) values (?,?, ?, ?, ?)', ['hola2', 10, 20, '2022-11-11', 20]);
        }

我从我的控制器的“设置”中调用这个函数,然后我分配已经分配了该表的模型。

CRUD::setModel(\App\Models\Banco::class);

列表显示正确,过滤器和分页,但搜索字段不能正常工作,所以我添加'searchLogic'到文本列,它工作。

protected function setupListOperation()
    {
        $this->crud->addColumn([
            'name'        => 'nombre',
            'label'       => 'Nombre',
            'searchLogic' => function ($query, $column, $searchTerm) {
                $query->orWhere('nombre', 'like', '%'.$searchTerm.'%');
            }
        ]);

我只是在每一列的标题中缺少了排序的箭头,那些noa出现了。我做错了什么,或者我缺少了一些带来这些细节的东西,或者可能在未来的更新中导致问题?

gk7wooem

gk7wooem1#

流程如下:

  • 点击创建路径,使用您提供的->setModel创建CrudPanel。
  • 该表已准备好绘制,它向/search端点执行 AJAX 请求,同样,将使用您定义的模型创建CrudPanel。

可能需要使用Model Boot 功能来更改Model中运行时的表?
不确定它会不会起作用,但它本身不是一个“背包问题”。
希望能有所帮助。
干杯

相关问题