7

我正在编写一个快速的一次性方法,将用户从旧表导入到我的新蛋糕应用程序中。我已将旧用户表 (old_users) 导入到我的蛋糕应用程序数据库中。基本上我只需要从 old_users 表中进行全选,然后遍历它们并使用类似 $newuser->create('old_username', 'old_password'); 之类的方法将它们添加到新用户表中。

但是,我不想为临时表创建模型等,因为此导入只会运行一次。所以我的问题是 - 我怎样才能从用户控制器中的蛋糕方法中进行基本选择以从该表中获取所有用户。我在想这样的事情:

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

但它失败并出现错误:

调用未定义的方法 UsersController::getDataSource()

我在文档中找不到太多关于如何从控制器中查询另一个数据库表(没有模型)的信息......

谁能指出我正确的方向?

提前致谢

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 回答
8

关于该部分的文档不正确。在您的database.php文件中找到连接的名称并使用以下代码(我的是默认代码):

$db = ConnectionManager::getDataSource("default"); // name of your database connection
$places_of_interest = $db->fetchAll("SELECT * FROM places_of_interest");
于 2014-05-12T12:12:08.493 回答
0

我曾经为非蛋糕数据库到蛋糕数据库的数据库转换脚本做了类似的事情。以下是该脚本的一些内容(基于 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 回答
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

最简单的方法是:

$model = $this->loadModel('你的模型名')->query("SELECT * FROM 表名")

于 2021-10-19T04:04:02.530 回答