먼저 MVC 프레임 워크에 익숙하지 않으므로 해당 영역에 대한 지식이 없다고 전합니다.모델에 관련 모델을 찾는 방법을 알려주는 방법은 무엇입니까?
디자이너 모델이 있는데 디자이너 모델에서 정보를 검색 할 때 각각의 디자이너에 대해 제품을 연결하려고합니다. 제품을 가져오고 싶습니다.
이 연관성은 간단하지 않으므로 케이크를 마술처럼 사용하지 않으므로 직접 정의해야합니다. 나는 자습서를 따라 왔고 나는 모두가 묶여있는 방법을 잘 모르지만 확신 할 수있다.
정확한 장소에 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 모델에서이 쿼리를 사용하여 관련 제품을 자동으로 찾으려면해야합니까?
// this assumes you are in the DesignersController
$this->Designer->Tag->find('all', array(
'joins' => array(
array(
'table' => 'designers_tags',
'alias' => 'FilterDesignersTag',
'type' => 'INNER',
'conditions' => array(
'FilterDesignersTag.tag_id = Tag.id'
)
)
),
'contain' => array('Designer', 'Product'),
'conditions' => array(
'FilterDesignersTag.designer_id' => $designer_id,
'FilterDesignersTag.include' => 1
)
));
데이터는 다시 태그 주위를 지향 올 것이다,하지만 당신은 당신이 필요 얻을 것이다 :
그건 하나의 helluva 쿼리입니다. 너 케익이 너를 위해 협회를 다룰 수 없다고 확신합니까? 협회를 설명하고, 그리고/또는 데이터베이스에서 반환하려는 것을 정확히 설명해 주시겠습니까? – Stephen
@Stephen, 디자이너 HABTM 태그, 제품 HABTM 태그. 모든 태그가 디자이너로 포함 된 제품이 포함됩니다. 또한 designer_tags 테이블에는'include'라는 부울 필드가 있습니다. false이면 해당 태그가있는 제품을 포함하면 안됩니다. 그런 식으로 카테고리를 생성하고 카테고리에 포함될 제품이 있어야하거나 갖지 않아야하는 태그를 선택할 수 있습니다. 이해가 되니? –
거의 알았습니다. 디자이너와 정확히 동일한 태그가있는 제품 만 필요합니까?아니면 디자이너가 가지고있는 * 모든 태그가있는 모든 제품을 원하십니까? – Stephen