我目前正在尝试在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
目录下PostsController
的index
函数
我仍然不知道如何打印出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); ?>