首先讓我注意到我是MVC框架的新手,所以不要假設在這方面有任何知識。如何告訴模型如何找到其相關模型?
我有一個設計器模型,當我從設計器模型中檢索信息時,我想爲每個設計器拉動相關的產品。
該協會並不簡單,所以蛋糕不會神奇地爲我做,所以我需要自己定義這個。我一直在跟隨教程,我認爲我很接近但不確定如何將它們結合在一起。
我有一個很長的查詢,如果你在正確的位置插入designer_id,它會選擇所有關聯的產品。
我想我應該把這個查詢放在Designer模型的某個地方,以便它知道如何檢索產品。
下面是該查詢,需要與designer_id
替換字符串看起來像{$__cakeID__$}
部分:
SELECT *, COUNT(DISTINCT tags.name) AS uniques
FROM products, products_tags, tags, designers, designers_tags
WHERE products.id = products_tags.product_id
AND tags.id = products_tags.tag_id
AND tags.id IN (
SELECT t.id
FROM tags t
LEFT JOIN designers_tags dt ON dt.tag_id = t.id
LEFT JOIN designers d ON d.id = dt.designer_id
WHERE d.id ={$__cakeID__$}
AND dt.include =1
)
AND products.id NOT IN (
SELECT products.id
FROM products, products_tags, tags
WHERE products.id = products_tags.product_id
AND tags.id = products_tags.tag_id
AND tags.id IN (
SELECT t.id
FROM tags t
LEFT JOIN designers_tags dt ON dt.tag_id = t.id
LEFT JOIN designers d ON d.id = dt.designer_id
WHERE d.id ={$__cakeID__$}
AND dt.include =0
)
)
AND designers.id = designers_tags.designer_id
AND designers_tags.tag_id = tags.id
GROUP BY products.id
HAVING uniques = (
SELECT COUNT(d.id) AS tag_count
FROM tags t
LEFT JOIN designers_tags dt
ON dt.tag_id = t.id
LEFT JOIN designers d
ON d.id = dt.designer_id
WHERE d.id = {$__cakeID__$}
AND dt.include =1
GROUP BY d.id
)
而且,這裏是設計師型號:
class Designer extends AppModel
{
var $name = 'Designer';
var $actsAs = array('Sluggable' => array('separator' => '-', 'overwrite' => false, 'label' => 'name'));
var $hasAndBelongsToMany = 'Tag';
var $hasOne = 'AlternateName';
var $hasMany = 'Vote';
}
會是什麼我需要做的是讓Designer模型使用這個查詢來自動找到它的關聯產品?
這是一個helluva查詢。你確定Cake不能爲你處理這個關聯嗎?你能描述一下這個關聯,並且/或者準確地描述你想從數據庫返回的內容? – Stephen 2010-12-22 18:16:28
@Stephen,設計師HABTM標籤,產品HABTM標籤。包含了所有標籤作爲設計者的產品。此外,designers_tags表具有一個名爲`include`的布爾字段(如果爲false),則不應包含具有這些標籤的任何產品。這樣,我可以創建一個類別,並選擇產品必須或不應具有哪些標籤才能包含在該類別中。合理? – 2010-12-22 18:20:46