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

时间:2014-03-30 15:04:39

标签: php sql cakephp

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

我无法弄明白该怎么做。我读了几个类似问题的答案,但它仍然无效。

据我所知,我应该把功能放在:

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

在目录Post中归档Model,然后输入以下代码:

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

index目录中PostsController的{​​{1}}功能。

我仍然无法弄清楚如何在Controller打印出数据。

提前感谢您的回答。

7 个答案:

答案 0 :(得分:10)

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';
     }
?>

答案 1 :(得分:2)

App::import("Model", "ModelName");  
    $model = new ModelName();  
    $query = "Select * from tablename";
    $data = $model->query($query);

答案 2 :(得分:2)

  

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

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

答案 3 :(得分:1)

$this->Post->query("SELECT * FROM posts ORDER by id desc");

答案 4 :(得分:0)

控制器

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

查看

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

答案 5 :(得分:0)

在这种情况下,无需进行额外的功能testx()。您也可以直接在索引函数中使用自定义查询,例如

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

并在 index.ctp文件中打印数据,

<?php print_r($data); ?>

希望这会对你有所帮助。

答案 6 :(得分:0)

您可以使用连接管理器来运行自定义SQL查询。按照Cake php文档中的这篇文章使用连接管理器: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);

现在,您可以使用结果变量在index.ctp中查看数据库中的数据。