我目前正在尝试在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
打印出数据。
提前感谢您的回答。
答案 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中查看数据库中的数据。