テーブル名はCakePHPのPrefixが「cake_」でWordPress「wp_」だとします。
そもそも下記のようにやれば、Model自体は自身の名称とちがうテーブルは全然使えるんだけど
class Sample extends AppModel {
public $useTable = 'example';
}
これだとPrefixが「cake_」前提なんですよね。無理矢理「wp_posts」とか指定すると「cake_wp_posts」で認識されてMissing Tableになっちゃう。
でも何とかできるでしょ〜、と思ってModelのソースをPrefixで検索したらすぐ出てきたww
↓これです。(cake/libs/model/model.phpの2827行目くらい)
function setDataSource($dataSource = null) {
$oldConfig = $this->useDbConfig;
if ($dataSource != null) {
$this->useDbConfig = $dataSource;
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
if (!empty($oldConfig) && isset($db->config['prefix'])) {
$oldDb =& ConnectionManager::getDataSource($oldConfig);
if (!isset($this->tablePrefix) || (!isset($oldDb->config['prefix']) || $this->tablePrefix == $oldDb->config['prefix'])) {
$this->tablePrefix = $db->config['prefix'];
}
} elseif (isset($db->config['prefix'])) {
$this->tablePrefix = $db->config['prefix'];
}
if (empty($db) || !is_object($db)) {
return $this->cakeError('missingConnection', array(array('code' => 500, 'className' => $this->alias)));
}
}
$this->tablePrefix = $db->config['prefix']とかやってますね。このあたりを書き換えちゃえばいいわけで、自分のModel側で以下のようにしてみました。
class News extends AppModel {
var $useTable = 'wp_posts';
public function setDataSource(){
parent::setDataSource();
$this->tablePrefix = '';
}
}
これでバッチリWordPress側のデータを取り扱えるはずです。



0 コメント:
コメントを投稿