1

我正在使用 cakePHP 3.7

我想从控制器创建一个临时表,然后使用它(带有一些条件和连接)来搜索一些要显示的数据。

表结构目前是静态定义的,即它具有的字段是固定的,因此我能够定义一个实体或一组字段。但是,内容会因用户输入而异。这意味着我想用准备好的 SQL 语句定义表,我将绑定到用户输入的变量。

我知道如何处理准备好的陈述。

但是我还没有完全理解正确的方法是什么,让 cakePHP 创建我的临时表并为其加载模型。

我在CakePHP 3: Best Practice for Temporary SQL Tables上找到了@ndm 的有用答案,并且 在我所做的尝试中,我为表指定了 setTemporary(true)。

但是我不断收到“表不存在”异常,所以我想我没有正确构建项目类和代码。正如@ndm 建议的那样,我无法通过使用获得的查询来创建表

$schema->createSql($connection);

因为 sql 依赖于用户输入。

其他找到的 stackoverflow 答案是关于与 3.x 不同的 cakePHP (2.x) 的旧版本

有人可以给我一些更详细的提示,说明在我的 cakePHP 项目中创建和使用使用准备好的语句创建的临时表的方法是什么?

4

1 回答 1

0

以这种方式解决:

  1. 我在数据库中创建了一个与我想要的临时表相对应的表
  2. 我已经运行 cake bake model 命令让 cakePHP 生成实体和表类
  3. 我已经从数据库中删除了表
  4. 在控制器中:

    4.a 我已经准备好并执行了创建临时表的语句

    4.b 我已经加载了模型并使用了它

我遇到的问题是(真可惜!)一个印刷错误,因为在连接查询中的某个时刻,我使用了模型的名称而不是条件数组中的表名称。

即我错误地要求:

->join([
                    'table' => 'tempLogs',
                    'type' => 'INNER',
                    'conditions' => 'tempLogs.Job = Istanze.Job',
                ])

而不是正确的:

->join([
                    'table' => 'temp_logs',
                    'type' => 'INNER',
                    'conditions' => 'temp_logs.Job = Istanze.Job',
                ])

temp_logs是临时表名,TempLogs是表类名

于 2019-08-27T07:32:36.563 回答