7

古いテーブルから新しいケーキアプリにユーザーをインポートするための簡単な使い捨て方法を書いています。古いユーザー テーブル (old_users) を Cake アプリのデータベースにインポートしました。基本的には、old_users テーブルからすべてを選択し、それらをループして、 $newuser->create('old_username', 'old_password'); のようなものを使用して新しい users テーブルに追加する必要があります。

ただし、このインポートは一度しか実行されないため、一時テーブルのモデルなどを作成したくありませんでした。だから私の質問は - ユーザーコントローラー内のケーキメソッドからこのテーブルからすべてのユーザーを取得するための基本的な選択をどのように行うことができますか? 私は次のようなことを考えていました:

public function admin_importOldUsers() {
        $db = $this->getDataSource();
        $db->fetchAll('SELECT * FROM old_users');
    }

しかし、それはエラーで失敗します:

未定義のメソッド UsersController::getDataSource() の呼び出し

コントローラー内から別の db テーブル (モデルなし) にクエリを実行する方法に関するドキュメントはあまり見つかりません....

誰かが私を正しい方向に向けることができますか?

前もって感謝します

4

5 に答える 5

10

モデルなしで CakePHP で標準の SQL クエリを手動で実行するqueryには、コントローラーで利用可能な任意のモデルでメソッドを使用できます (使用するモデルは関係ありません)。

class MyController extends AppController
{
    public function index()
    {
        $result = $this->AnyModel->query("SELECT * FROM my_table");
    }
}

CakePHP 1.3 - モデル

于 2012-11-07T13:09:55.863 に答える
0

今すぐ試す機会はありませんが、以下のコードで動作するはずです。

class NoModelsController extends AppController{
    var $name="NoModels";
    var $uses = null;  

    public function admin_importOldUsers() {
        $results = $this->Model->query('SELECT * FROM old_users');
        pr($results);
    }
}
于 2012-11-07T12:26:33.357 に答える
0

Cake 以外の DB から Cake DB へのデータベース変換スクリプトで、一度似たようなことをしました。そのスクリプトの一部を次に示します (CakePHP 1.3 に基づいており、2.x を使用する場合は若干異なる場合があります)。

// Require the config/database.php file for DB connection
require_once(dirname(__FILE__) . '/database.php');
$DB = new DATABASE_CONFIG();

// Setup the connection
if($DB->default['driver'] === 'mysqli') {
    // Connect using MySQLi
    print "Connecting to database: ";
    $dbc = new mysqli($DB->default['host'], $DB->default['login'], $DB->default['password'], $DB->default['database']);

    // Make sure we use UTF8 encoding
    if($DB->default['encoding'] == "UTF8") {
        $dbc->set_charset($DB->default['encoding']);
    }

    // At this point you can just run raw queries like:
    $dbc->query("INSERT INTO `groups` (`id`, `name`) VALUES (1, 'Management'), (2, 'Operations')");

    // Close the database connection
    $dbc->close();
} else {
    die("Please use mysqli");
}
于 2012-11-07T12:21:50.407 に答える