2013-04-17 5 views
1

저는 Zend를 처음 접하고 Zend Select 추상화를 사용했습니다. 다른 스키마의 다른 테이블을 조인하는 쿼리를 만들려고 할 때 약간의 문제가 발생했습니다. Zend 2.1 : Db> Sql> Select를 통해 다중 스키마 조인을 할 수 있습니까?

SELECT * FROM `assets` 
JOIN `projects` 
ON `assets`.project_id = `projects`.id 
JOIN `secondSchema`.`users` AS `users` 
ON `users`.id = `projects`.user_id 
WHERE `projects`.id = ? 
AND `users`.id = ? 

젠드/DB/SQL/SQL 작업/I가 설치 다음 선택 빌더 할 수있는 선택,하지만 난 다른 스키마를 설정 고민하고 있습니다 :

내가 생산하기 위해 노력하고있어 MySQL의 쿼리입니다 결과는 SQL 문 : 다음 교체 스키마하지만 어댑터의 원래 스키마를 설정 \ 젠드 \ DB \ SQL을 \ TableIdentifier를 사용하여 시도

$select = $this->_sqlBuilder->select(); 
    $select->from('assets'); 
    $select->join(
     'projects', 
     'projects.id = assets.project_id' 
    ); 
    $select->join(
     'users', 
     'users.id = projects.user_id' 
    ); 
    $select->where->equalTo('assets.project_id', $projectID); 
    $select->where->equalTo('users.id', $userId); 

은, 모두가 할 수있는 방법처럼이 보이지 않는다 스키마에 있습니다.

Sql/Select를 사용하여이 작업을 수행 할 수 있습니까? 아니면 Zend Db에서 잘못된 방식으로 진행할 예정입니까? 이 슬프게 DB \ 선택을 사용하여 실제로 가능하지 않다처럼 도움

+0

실제로 무슨 일이 일어나고 있습니까? 어떤 오류? – Andrew

+0

반환되는 오류는 'Statement was sql'을 생성 할 수 없습니다. 오류가 발생한 SQL을 확인하면 사용자 테이블이 다른 스키마에 있다는 문제입니다. 그래서 내 문제는 두 번째 조인 내에서 추가 스키마를 추가해야한다는 것입니다. 이 희망은 원시 SQL – tomo661

+0

에 의지하지 않고도 가능합니다.이 질문과 유사하게 보입니다 -> http://stackoverflow.com/questions/15830774/zf2-make-a-join-between-two-different-databases 가능한 답변 이외의 답변은 원시 SQL은 가야하는 길을 제안합니다 – Crisp

답변

0

Select 클래스가 따옴표를 이스케이프 처리하기 때문에 문제가 발생합니다.

$ Select 포함>

같이 렌더링된다 ("database2.table2.id = table.id를", "database2.table2")를 조인.

SELECT '표'* '를 DATABASE2. 표 2 '. * FROM'테이블 DATABASE2 'ON'database2.table2을 ' INNER JOIN은' '.'표 2 '.'ID '='테이블 '.' "DATABASE2 주위에 인용 ID '

참고 일관성이 잘못된을 .table2 ".

\ Zend \ Db \ Sql \에있는 596, 599, 624, 625 줄을 업데이트하십시오. "quoteIdentifierInFragment"를 "quoteIdentifier"메서드로 바꾸려면 Select를 선택하여 쿼리를 올바르게 렌더링하고 크로스 데이터베이스 조인을 수행하십시오.

현재 동작이 의도 된 것이 아니므로 Zend에게 문제점 보고서를 제출했습니다. 향후 빌드에서 업데이트 될 예정입니다. 지금 당장은 수동으로 클래스를 업데이트하기는 쉽지만 (약간 더러운 것 같지만).

https://github.com/zendframework/zf2/issues/4307

+0

좋은 수정 비록 코어 zend PHP에 대한 편집은 쉽게 쉽게 업데이 트를 의미하지 않습니다, 수정 프로그램이 잘 작동합니다.젠드 (Zend)가 수정하기를 원할지도 모르는 감독의 시각 일 수 있습니다. – tomo661