我正在使用CakePHP 3.7
我想从控制器创建一个临时表,然后使用它(具有某些条件和联接)来搜索一些要显示的数据。
表结构目前是静态定义的,即它具有固定的字段,因此我可以定义一个实体或一组字段。 但是,内容随用户输入而变化。这意味着我想用准备好的SQL语句定义表,并将其变量绑定到用户输入。
我知道如何处理准备好的语句。
但是我还不完全清楚继续前进的正确方法是让cakePHP创建我的临时表并为其加载模型。
我在CakePHP 3: Best Practice for Temporary SQL Tables找到了@ndm的有用答案 并且在尝试中,我为表指定了setTemporary(true)。
但是我一直收到“表不存在”异常,所以我想我没有正确构造项目类和代码。 我无法按照@ndm的建议通过使用
创建的查询来创建表$ schema-> createSql($ connection);
因为sql取决于用户输入。
其他发现的stackoverflow答案是关于cakePHP(2.x)的较旧版本的,与3.x版本不同
有人可以给我一些更详细的提示吗,关于在cakePHP项目中使用准备好的语句创建和使用临时表的方法是什么?
答案 0 :(得分:0)
已解决:
在控制器中:
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是表类的名称