2014-03-30 65 views
2

我目前正試圖在CakePHP框架中執行自定義查詢,意思是代替使用CakePHP語法,我想執行普通SQL查詢如SELECT * FROM post ORDER BY id desc如何在CakePHP中執行自定義查詢

我不知道該怎麼做。我閱讀了幾個類似問題的答案,但它仍然不起作用。

據我明白我應該把功能,如:

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

到文件Post目錄Model,然後把這個代碼:

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

index功能PostsControllerController目錄。

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

在此先感謝您的任何答案。

+1

你爲什麼要執行最瑣碎的SQL查詢作爲普通的SQL,而ORM提供一噸的特點進行適當的轉義?甚至可以使用ORM構建非常複雜的查詢。你所做的是恕我直言,只是錯誤,並否定了框架的好處。 – burzum

回答

0

控制器

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

查看

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

我試過,但取而代之打印出我得到的變量「通知(8):未定義的索引:發佈[APP/View/Posts/index.ctp,第17行]」。我使用$ post ['Post'] ['id']打印出變量。但是它爲表中的所有行打印出相同的錯誤消息,所以SQL查詢至少部分工作。 – Celebris

+1

您是否使用'debug($ posts)'?它可能是$ post ['post']。 – cornelb

1
$this->Post->query("SELECT * FROM posts ORDER by id desc"); 
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); ?> 

希望這會幫助你。

8
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
App::import("Model", "ModelName"); 
    $model = new ModelName(); 
    $query = "Select * from tablename"; 
    $data = $model->query($query); 
相關問題