Cakephp自定义数据源保存/更新

时间:2010-12-02 02:00:02

标签: php api rest cakephp datasource

使用最新的CakePHP build 1.3.6。

我正在为外部REST API编写自定义数据源。我所有的阅读功能都很漂亮。我正在努力使用Model :: save&模型创建::

根据文档,必须实现以下方法(见下文并注意它没有提及计算)。这些都已实施。但是,我得到了一个“致命的错误:调用未定义的方法ApiSource :: calculate()”。所以我实现了ApiSource :: calculate()方法。

  

describe($ model)listSources()At   至少之一:   create($ model,$ fields = array(),$ values = array())   read($ model,$ queryData = array())   update($ model,$ fields = array(),$ values = array())   删除($ model,$ id   = null)

public function calculate(&$model, $func, $params = array())
 {
  pr($model->data); // POST data
  pr($func); // count
  pr($params); // empty
  return '__'.$func; // returning __count;
 }

如果从我的模特打电话

$this->save($this->data)

它正在调用calculate,但没有其他实现的方法。我希望它能调用ApiSource :: create()或ApiSource :: update()

有任何想法或建议吗?

2 个答案:

答案 0 :(得分:1)

狮子座,你让我朝正确的方向倾斜。答案是在使用自定义数据源的模型中。那个模型必须定义你的_schema。

class User extends AppModel
{  
    public $name = 'User';

    public $useDbConfig = 'cvs';

    public $useTable = false;

    public $_schema = array(
        'firstName' => array(
            'type' => 'string',
            'length' => 30
        ),
        'lastName' => array(
            'type' => 'string',
            'length' => 30
        ),
        'email' => array(
            'type' => 'string',
            'length' => 50
        ),
        'password' =>  array(
            'type' => 'string',
            'length' => 20
        )
        );

...
}

我猜测如果你在自定义数据源中实现了一个describe()方法,它也可以解决问题。在这种情况下,需要预先定义以授权保存和/或创建。

答案 1 :(得分:0)

来自API:http://api13.cakephp.org/class/dbo-source#method-DboSourcecalculate

“返回SQL计算,即COUNT()或MAX()”

在〜/ cake中快速搜索可在8个文件中找到20个匹配项。其中之一是dbo_source.php中的定义

其他七个是:

  • dbo_source.test.php
  • code_coverage_manager.test.php
  • code_coverage_manager.php
  • dbo_db2.php
  • model.php
  • tree.php
  • containable.php

如果不深入研究这个问题,我怀疑你的问题出在Model :: save

您可能必须定义一个计算方法以适应自定义数据源的结构,因为Cake不会知道如何执行此操作。