最初に、私は MVC フレームワークを初めて使用するので、その分野の知識を前提としないでください。
デザイナー モデルがあり、デザイナー モデルから情報を取得するときに、各デザイナーに関連する製品を取得したいと考えています。
関連付けは単純ではないため、cake が魔法のように関連付けを行うわけではないので、自分で定義する必要があります。私はチュートリアルに従ってきましたが、近いと思いますが、すべてを結び付ける方法がわかりません。
designer_id を適切な場所に挿入すると、関連するすべての製品が選択されるという非常に長いクエリがあります。
製品を取得する方法を認識できるように、このクエリを Designer モデルのどこかに配置する必要があると思います。
これがクエリです。次のように見える文字列の部分は、次のよう{$__cakeID__$}
に置き換える必要がありますdesigner_id
。
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 モデルがこのクエリを使用して関連する製品を自動的に検索するようにするには、どうすればよいですか?