我正在开发一个Cake应用程序,它从数据库以及第三方REST API中提取数据。我想使用我正在尝试访问的各种REST集合的模型(从单个行为继承)来正确实现REST API,但是如果没有相应的数据库表,我无法使我的模型工作。我最初的计划是创建class Software extends Cake\ORM\Entity
和class SoftwaresTable extends Cake\ORM\Table
,然后使用before*
挂钩覆盖各种调用,并将它们重新路由到API而不是数据库。
但是,我已将die()
添加到beforeMarshal
,beforeRules
,beforeFind
,beforeSave
和beforeDelete
,并且调用了{{}来自控制器的1}}仍然失败并显示消息
SQLSTATE [42S02]:未找到基表或视图:1146表'inventory.softwares'不存在
我的方法有误吗?我缺少一些简单的东西?
答案 0 :(得分:1)
如果您不希望模型由数据库表支持,请不要使用Cake\ORM\Table
。而是创建自己的基础模型类,实现Cake\Datasource\RepositoryInterface
。然后让你的模型扩展这个基类。
这不是一项微不足道的任务,但是比你试图破解Table
类'回调以防止它们连接到数据库更好。
答案 1 :(得分:0)
查看CakePHP 3的源代码,模型似乎与数据库数据源耦合。
在CakePHP 2.x中,您可以定义自己的数据源,因此可以轻松地将其交换为由外部API而不是数据库提供,但我看不到第一眼看到的功能(某人是谁)与CakePHP 3合作的人比我更能说出来。)
说,有一个EntityTrait
。您可能最好创建自己的类来表示每个实体,然后将该特征添加到您的类中。例如:
.leaflet-image-layer {
-webkit-filter: brightness(0.5);
filter: brightness(0.5);
}