2014-01-13 48 views
0
public function index() { 
    $this->paginate = array(
     'order'=>array('published_date'=>'desc'), 
     'group'=>'book_id', 
     'conditions'=>array('Chapter.published'=>1,'Chapter.published_date <= NOW()') 
    ); 
    $chapters = $this->paginate(); 
    $this->set('chapters',$chapters); 

} 

我的數據庫外鍵ID和秩序集團有表。每本書有許多章節CakePHP的:由出版日期

有場「* book_id *」,即外鍵引用表主鍵(ID)。

這是我的索引頁。我們的想法是通過出版date.In控制器擺脫每本書和秩序最新章節ChapterController,我用組由聲明,但它並未得到最新章節,就得到了第一章的形式每本書。

所以,請幫我解決它。非常感謝

回答

0

我相信,通過組將使用的第一行自然是在你的結果,我不認爲有一個簡單的方法在GROUP BY加上之前的結果排序方式。但我認爲下面的查詢會得到你想要的結果:

SELECT * FROM books INNER JOIN (SELECT * FROM chapters WHERE chapters.published = 1 AND chapters.published_date <= NOW() ORDER BY chapters.published_date DESC) AS Chapter ON Chapter.book_id = books.id GROUP BY books.id 

我認爲下面是CakePHP的應該是什麼樣子(我假設你正在分頁書):

$this->Book->recursive = -1; //Join manually instead 
$this->paginate = array(
    'order' => array('published_date' => 'desc'), 
    'group' => 'Book.id', 
    'joins' => array(
      array(
       'table' => '(SELECT * FROM chapters)', 
       'alias' => 'Chapter', 
       'conditions' => array(
         'Chapter.book_id = Book.id', 
         'Chapter.published' => 1, 
         'Chapter.published_date <= NOW()', 
       ), 
       'type' => 'inner', 
       'order' => array('published_date' => 'desc'), 
      ), 
    ), 
); 
+0

謝謝凱,我嘗試使用你的建議,但效果不好。它只獲取圖書信息,沒有章節信息。非常感謝。 – minhchieng

+0

看看它生成的實際SQL查詢。在編寫CakePHP查詢時,我確實犯了一個錯誤。 – Kai

+0

非常感謝,我會測試它 – minhchieng