Zunächst möchte ich bemerken, dass ich neu in MVC-Frameworks bin, also keine Kenntnisse in diesem Bereich annehmen.Wie kann ich einem Modell sagen, wie es die zugehörigen Modelle findet?
Ich habe ein Designer-Modell, ich möchte verknüpfte Produkte für jeden Designer ziehen, wenn ich Informationen aus dem Designer-Modell abrufen.
Der Verein ist nicht einfach so Kuchen wird nicht magisch es für mich tun, also muss ich das selbst definieren. Ich habe Tutorials verfolgt und denke, dass ich in der Nähe bin, aber nicht sicher bin, wie ich alles zusammenbinden kann.
Ich habe eine sehr lange Abfrage, dass wenn Sie die Designer_ID an den richtigen Stellen anschließen, wird es alle zugehörigen Produkte auswählen.
Ich denke, ich soll diese Abfrage irgendwo im Designer-Modell platzieren, damit sie weiß, wie man die Produkte abruft.
Hier ist die Abfrage, die Teile der Zeichenfolge, die wie {$__cakeID__$}
aussehen müssen mit den designer_id
ersetzt werden:
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
)
Auch hier ist das Designer-Modell:
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';
}
Was würde Ich muss tun, damit das Designer-Modell diese Abfrage verwendet, um die zugehörigen Produkte automatisch zu finden?
Das ist eine höllische Abfrage. Bist du sicher, dass Cake die Verbindung nicht für dich übernehmen kann? Können Sie die Assoziation beschreiben und/oder genau beschreiben, was Sie von der Datenbank erhalten möchten? – Stephen
@Stephen, Designer HABTM-Tags, Produkt HABTM-Tags. Die Produkte, die alle Tags als Designer enthalten, sind enthalten. Auch die Tabelle designers_tags enthält ein boolesches Feld mit dem Namen 'include', falls false, und alle Produkte mit diesen Tags sollten NICHT enthalten sein. Auf diese Weise kann ich eine Kategorie erstellen und auswählen, welche Produkte Produkte haben oder nicht haben dürfen, um in die Kategorie aufgenommen zu werden. Sinn ergeben? –
Fast schon verstanden: Benötigen Sie nur die Produkte, die genau die gleichen Tags haben wie der Designer?Oder wollen Sie alle Produkte, die ein * an * Tag haben, das ein Designer auch hat? – Stephen