如何在CakePHP中手动执行SQL查询而不使用模型

bvhaajcl  于 2022-11-11  发布在  PHP
关注(0)|答案(5)|浏览(164)

我正在写一个快速的一次性方法来将用户从旧表导入到我的新cake应用程序中。我已经将旧的用户表(old_users)导入到我的cake应用程序数据库中。基本上我只需要对old_users表执行一个全选操作,然后使用类似$newuser-〉create('old_username','old_password')这样的命令循环访问它们并将它们添加到新的用户表中;
但是,我不想为临时表创建一个模型等,因为这个导入只运行一次。所以我的问题是-我如何才能做一个基本的选择来从用户控制器中的一个cake方法中获取这个表中的所有用户。我在想这样的事情:

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

但它失败了,错误如下:
调用未定义的方法UsersController::getDataSource()
我在文档中找不到太多关于如何从控制器中查询另一个DB表(没有模型)的内容。
谁能给我指个方向?
先谢谢你

esbemjvw

esbemjvw1#

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

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

CakePHP 1.3 -模型

lskq00tm

lskq00tm2#

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

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

gcxthw6b3#

我曾经做过一个类似的数据库转换脚本,将非Cake数据库转换为Cake数据库。下面是该脚本的一些片段(基于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");
}
dwthyt8l

dwthyt8l4#

现在没有机会尝试它,但下面的代码应该工作.

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

    public function admin_importOldUsers() {
        $results = $this->Model->query('SELECT * FROM old_users');
        pr($results);
    }
}
hujrc8aj

hujrc8aj5#

最简单的方法是:
$model = $this-〉loadModel('您的模型名称')-〉query(“SELECT * FROM表名称”)

相关问题