Cakephp Custom Datasource Сохранить / Обновить - PullRequest
1 голос
/ 02 декабря 2010

Использование последней версии CakePHP 1.3.6.

Я пишу собственный источник данных для внешнего REST API.У меня все функции чтения работают прекрасно.Я борюсь с Model :: save & Model :: create.

Согласно документации, должны быть реализованы следующие методы (см. Ниже и обратите внимание, что в нем не упоминается метод расчета).Все это реализовано.Однако я получаю «Неустранимая ошибка: вызов неопределенного метода ApiSource :: Calculate ()».Поэтому я реализовал метод ApiSource :: Calculate ().

description ($ model) listSources () По крайней мере один из: create ($ model, $ fields = array (), $ values ​​= array()) чтение ($ model, $ queryData = array ()) обновление ($ 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 ()

Есть мысли или предположения?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Лео, ты подсказал мне правильное направление. Ответ был в модели, которая использовала пользовательский источник данных. Эта модель ДОЛЖНА определить вашу _схему.

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
        )
        );

...
}

Я предполагаю, что если вы внедрите метод description () в пользовательский источник данных, это тоже решит проблему. В этом случае его необходимо предварительно определить для авторизации сохранений и / или создания.

0 голосов
/ 02 декабря 2010

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

"Возвращает вычисление SQL, т.е. COUNT () или MAX ()"

Быстрый поиск в ~ / cake находит 20 совпадений в 8 файлах,Одним из них является определение в dbo_source.php

Другие семь:

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

Не вдаваясь слишком глубоко в это, я подозреваю, что ваша проблема заключается в Model :: save

Вам, вероятно, придется определить метод вычисления, чтобы соответствовать структуре вашего пользовательского источника данных, потому что Cake не знает, как это сделатьчто.

...