簡體   English   中英

CakePHP - 使用HABTM連接表字段進行排序

[英]CakePHP - Sorting using HABTM Join Table Field

這是我的問題:

表1:帖子

id - int
title - varchar

表2:類別

id - int
name - varchar

HABTM JoinTable:categories_posts

id - int
post_id - int
category_id - int
postorder - int

如您所見,連接表包含一個名為“postorder”的字段 - 這用於對特定類別中的帖子進行排序。 例如,

Posts: Post1, Post2, Post3, Post4
Categories: Cat1, Cat2
Ordering:
     Cat1 - Post1, Post3, Post2
     Cat2 - Post3, Post1, Post4

現在在CakePHP中,

$postpages = $this->Post->Category->find('all');

給我一個類似的數組

Array
(
  [0] => Array
    (
      [Category] => Array
        (
          [id] => 13
          [name] => Cat1
        )
        [Post] => Array
        (
          [0] => Array
          (
            [id] => 1
            [title] => Post2
            [CategoriesPost] => Array
            (
              [id] => 17
              [post_id] => 1
              [category_id] => 13
              [postorder] => 3
            )
          )
          [1] => Array
          (
            [id] => 4
            [title] => Post1
            [CategoriesPost] => Array
            (
              [id] => 21
              [post_id] => 4
              [category_id] => 13
              [postorder] => 1
            )
          )

        )
    )
) 

如您所見[Post],它們不是根據[CategoriesPost] .postorder排序的,而是根據[CategoriesPost] .id排序。 如何根據[CategoriesPost] .postorder獲取數組?

在此先感謝您的時間 :)

更新1:Cake的SQL日志中的查詢是:

SELECT `Category`.`id`, `Category`.`name` FROM `categories` AS `Category` WHERE 1 = 1

SELECT `Post`.`id`, `Post`.`title`, `CategoriesPost`.`id`, `CategoriesPost`.`post_id`, `CategoriesPost`.`category_id`, `CategoriesPost`.`postorder` FROM `posts` AS `Post` JOIN `categories_posts` AS `CategoriesPost` ON (`CategoriesPost`.`category_id` IN (13, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52) AND `CategoriesPost`.`post_id` = `Post`.`id`) 

我正在尋找的是如何在第二個SELECT SQL查詢中將蛋糕放入Order By CategoriesPost.postorder。

更新2:嘗試使用如下命令

$this->Post->Category->find('all',array('order'=>array('postorder'=>'ASC')));

拋出SQL錯誤

SQL Error: 1054: Unknown column 'PostsCategory.postorder' in 'order clause'

SQL查詢是

SELECT `Category`.`id`, `Category`.`name` FROM `categories` AS `Category` WHERE 1 = 1 ORDER BY `CategoriesPost`.`postorder` ASC

而不是第二個SQL查詢中的ORDERBY(在我的update1中),它在第一個SQL查詢中執行,如上所示。

嘗試將其作為協會的一部分:

var $hasAndBelongsToMany = array(
    'Post' => array(
        ...
        'order' => 'CategoriesPost.postorder DESC',
    )
)

這可能有效,也可能無效,尚未測試過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM