如何在CakePHP中执行自定义查询


How to execute custom query in CakePHP

我目前正在尝试在CakePHP框架中执行自定义查询,这意味着不使用CakePHP语法,我想执行正常的SQL查询,如SELECT * FROM post ORDER BY id desc

我想不出该怎么做。我读了几个类似问题的答案,但它仍然不起作用。

就我的理解,我应该把函数如下:

public function testx()
{
    $sql = "SELECT * FROM posts WORDER by id desc";
    return $this->query($sql);
}

Model目录下的Post文件,然后放入以下代码:

$result = $this->Post->testx();

Controller目录下PostsControllerindex函数

我仍然不知道如何打印出View/Posts/index.ctp中的数据。

谢谢你的回答。

public function index(){
    $this->loadModel('Post'); //or you can load it in beforeFilter()
    $data=$this->Post->query('SELECT * FROM posts ORDER by id desc');
    $this->set('data',$data);
}

在你的视图文件index.ctp。写下面的代码

<?php
     if($data) {
          echo "<pre>";
          print_r($data);
     } else {
          echo 'no data found';
     }
?>

如果你想在没有模型的情况下执行删除(或任何其他)查询,那么你应该尝试

$db = ConnectionManager::getDataSource('default');
$db->rawQuery("DELETE FROM table WHERE id=5");

可以使用连接管理器运行自定义SQL查询。按照cakephp文档中的这篇文章来使用连接管理器:https://book.cakephp.org/3.0/en/orm/database-basics.html

use Cake'Datasource'ConnectionManager;
$connection = ConnectionManager::get('default');
$results = $connection->execute('SELECT * FROM articles')->fetchAll('assoc');

在此之后查看结果在你的视图(index.ctp),你必须设置结果变量

$this->set('result',$result);

现在您可以在索引中查看数据库中的数据。使用结果变量的CTP

App::import("Model", "ModelName");  
    $model = new ModelName();  
    $query = "Select * from tablename";
    $data = $model->query($query);
$this->Post->query("SELECT * FROM posts ORDER by id desc");

控制器

$result = $this->Post->testx();
$this->set('posts', $result);
视图

debug($posts);
foreach ($posts as $post) {
   // ...
}

在本例中不需要创建这样的额外函数testx()。您还可以直接在索引函数中使用自定义查询,如

public function index(){
    $data=$this->Post->query('SELECT * FROM posts ORDER by id desc');
    $this->set('data',$data);
}

索引。ctp文件只打印数据,

<?php print_r($data); ?>