1

私は単純なものを作成しましたdatasource

// app/Model/Datasource/FeedSource.php

App::uses('DataSource', 'Model/Datasource');

class FeedSource extends DataSource {
    public function abcd() {
        echo 'Hello World!';
    }
}

私の中でdatabase.php

public $feed = array(
    'datasource' => 'FeedSource'
);

そしてFeedaモデルでは:

class Feeda extends AppModel {
    public $useTable = false;
    public $useDbConfig = 'feed';
}

listコントローラーで:

$this->loadModel('Feeda');
$this->Feeda->abcd();

ただし、致命的なエラーが返されます。

Error: Call to undefined method FeedSource::query()

それを解決する方法は?

ありがとう...

4

1 に答える 1

1

おそらくあなたはDboSourceの代わりに意味しましたDataSource

DataSourceにはメソッドクエリがありませんが、DboSourceにはあります。次のようにコードを更新します。

App::uses('DboSource', 'Model/Datasource');
class FeedSource extends DboSource {}

編集:それは問題ではないようです。SourceModelを呼び出す魔法の__callメソッドがあり ます。これは自分で実装する必要があります。$this->getDataSource()->query($method, $params, $this);

class FeedSource extends DataSource {
    public function abcd() {
        echo 'Hello World!';
    }

    public function query($method, $params, $Model) {
        // you may customize this to your needs.
        if (method_exists($this, $method)) {
            return call_user_func_array(array($this, $method), $params);
        }
    }
}
于 2012-08-13T01:28:55.393 に答える