Burada benim sorunum:
Tablo1: Mesajlar
id - int
title - varchar
Tablo2: Kategoriler
id - int
name - varchar
HABTM JoinTable: categories_posts
id - int
post_id - int
category_id - int
postorder - int
Gördüğünüz gibi, katılmak tablo 'postorder' adında bir alan içeren - bu, belirli bir kategorideki mesajları sipariş içindir. Örneğin,
Posts: Post1, Post2, Post3, Post4
Categories: Cat1, Cat2
Ordering:
Cat1 - Post1, Post3, Post2
Cat2 - Post3, Post1, Post4
Şimdi CakePHP'de,
$postpages = $this->Post->Category->find('all');
Bana böyle bir dizi verir
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
)
)
)
)
)
Eğer [Mesaj] görebileceğiniz gibi, onlar postorder. [CategoriesPost] göre sıralanmıştır değil ama. Kimliği [CategoriesPost] göre sıralanmıştır. Dizi [CategoriesPost] göre sipariş nasıl alabilirim. Postorder?
Zaman ayırdığınız için şimdiden teşekkürler :)
Update 1: The Queries from Cake's SQL Log are:
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`)
Ne arıyorum pasta bu ikinci SELECT SQL Query CategoriesPost.postorder By Order koymak nasıl olduğunu.
Update 2: Trying to use order as following
$this->Post->Category->find('all',array('order'=>array('postorder'=>'ASC')));
SQL hata atıyor
SQL Error: 1054: Unknown column 'PostsCategory.postorder' in 'order clause'
SQL Query
SELECT `Category`.`id`, `Category`.`name` FROM `categories` AS `Category` WHERE 1 = 1 ORDER BY `CategoriesPost`.`postorder` ASC
Bunun yerine (benim Update1 olarak) ikinci SQL sorgusunda bir orderBy arasında, onun yukarıda gösterildiği gibi, ilk önce SQL sorgusunda idam alıyorum.