如何在没有模型的情况下在CakePHP中手动执行SQL查询

时间:2012-11-07 12:04:56

标签: cakephp cakephp-1.3

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

之类的内容将它们添加到新用户表中

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

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

但它失败并出现错误:

  

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

我在文档中找不到如何从控制器中查询另一个db表(没有模型)....

有人能指出我正确的方向吗?

提前致谢

4 个答案:

答案 0 :(得分:9)

要在没有模型的情况下在CakePHP中手动运行标准SQL查询,您可以在控制器可用的任何模型上使用query方法(与您使用的模型无关): / p>

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

CakePHP 1.3 - Models

答案 1 :(得分:8)

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

$db = ConnectionManager::getDataSource("default"); // name of your database connection
$places_of_interest = $db->fetchAll("SELECT * FROM places_of_interest");

答案 2 :(得分: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");
}

答案 3 :(得分: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);
    }
}