교리를 사용하여 MySQL 데이터베이스에서 멀티 테이블 삭제의 구문은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2247905

문제

사용 교의, 여러 테이블에서 수집 한 데이터를 기반으로 단일 테이블에서 레코드를 삭제하려고합니다.

'Companies_Groups'는 '회사'를 '그룹'에 연결하는 협회 테이블입니다. 특정 회사에 링크 된이 테이블의 모든 레코드를 삭제하고 싶습니다. '공개'그룹에 연결된 'Companies_Groups'레코드만이 삭제됩니다.

순수한 SQL로 이것을 써야한다면 다음과 같이 보일 것입니다.

DELETE companies_groups
FROM companies_groups, groups
WHERE companies_groups.companyID = 7
AND companies_groups.groupID = groups.id
AND groups.groupType = 'public'

교리의 동등한 것은 무엇입니까? 나는 지금 한 시간 정도 어려움을 겪고 있습니다.

현재 나는 이것을 가지고있다 :

$query = Doctrine_Query::create()
  ->delete('Company_group cg')
  ->from('Company_group cg, Group g')
  ->where( "cg.companyID = ? AND g.groupType = 'public' AND g.id = cg.groupID ", array( $companyID ) );

(내 교리 모델은 'Companies_Groups'테이블의 'Company_Group'이고 '그룹'테이블의 '그룹'입니다)

이 SQL을 생성하는 것 :

DELETE FROM companies_groups, groups WHERE (companyid = ? AND grouptype = 'public' AND id = groupid)

생성 된 SQL이 삭제와 Froms 사이에 'Companies_Groups'가 누락되었으며 예선이 삭제된다는 것을 알 수 있습니다 (의미 'ID'는 모호합니다).

도움이 될 추가 정보가 있으면 알려주십시오.

도움이 되었습니까?

해결책

그것을 해결했습니다. 나는 가입을 직접 구축하려고 시도하는 대신 하위 퀘스트를 사용했고 교리가 특정 방식으로 SQL을 건설하도록 강요하려고 시도하지 않았습니다.

이와 같은 일을 해야하는 다른 사람에게는 다음과 같은 것이 있습니다.

$query = Doctrine_Query::create()
  ->delete('Company_group')
  ->where( "companyID = ?", array( $companyID ) )
  ->addWhere( "groupID IN (SELECT g.id FROM Group g WHERE g.groupType = 'public')" );

건배.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top