2010-12-02 65 views
1

使用最新的CakePHP内部版本1.3.6。Cakephp自定义数据源保存/更新

我正在为外部REST API编写自定义数据源。我已经拥有了所有读取功能,效果非常好。我在Model :: save & Model :: create中挣扎。

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

describe($model) listSources() At least one of: create($model, $fields = array(), $values = array()) read($model, $queryData = array()) update($model, $fields = array(), $values = array()) delete($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) 

它调用计算,但没有其他实现的方法。我期望它要么调用ApiSource :: create()或ApiSource :: update()

任何想法或暗示?

+0

嗯,我使用自定义数据源,他们没有`calculate`方法。你可以做一个`debug_backtrace`来查看从哪里调用? – deceze 2010-12-02 02:19:48

+0

你使用什么版本的蛋糕?从我读到的,这开始于1.3.2 – zmonteca 2010-12-02 16:26:56

回答

0

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

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

在〜/饼快速搜索发现在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
  • 包含le.php

没有钻研过深成这样,我怀疑你的问题出在型号::保存

你可能必须定义一个计算方法,以满足您的自定义数据源,因为蛋糕的结构不知道该怎么做。

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()方法来解决这个问题的话。在这种情况下,它需要预先定义为授权保​​存和/或创建。