2013-05-07 2 views
5

내 schema.yml 파일교리의 관계는 어떤 조직이 저장된 정수 값 0을 가지고 그런 organisation_id이없는 문자열

Organisation: 
    columns: 
    id: { type: integer(4), notnull: true, unique: true, primary: true, autoincrement: true } 
    name: { type: string(100), notnull: true, unique: true } 
    parent_organisation_id: { type: integer(4), notnull: false } 

    relations: 
    ParentOrganisation: { class: Organisation, local: parent_organisation_id, foreignAlias: ChildOrganisations } 

반환합니다. 놀랍게도이 코드를 실행하면

class organisationActions extends autoOrganisationActions{ 

    public function executeEdit(sfWebRequest $request){ 

     $this->organisation = $this->getRoute()->getObject(); 
     $p = $this->organisation->getParentOrganisationId(); 
     var_dump($p); 

결과는 문자열 (1) "0"

왜이 정수를 반환하지 않는, 그래서 === 0

+0

안녕하세요 @ jdog, 어떤 환경과 스택을 사용합니까? PHP 버전, sf 버전 (1.4 가정 ...), propel 또는 교리? mysql 또는 postgres? 그래서 난 당신의 문제를 복제 할 수 있습니다 .... – Matteo

+0

안녕하세요 @ jdog, 내 대답은 어떨까요? – Matteo

+0

안녕하세요 @ jdog 모든 뉴스? – Matteo

답변

3

I을 비교할 수 있습니다 몇 가지 테스트를 해보면 모든 엔티티 모델 sfDoctrineRecord의 부모 클래스가 _call 메소드에서하는 마법 호출을 통해 엔티티의 모든 값이 반환된다는 것을 알 수 있습니다. 따라서 call_user_func_array의 반환 유형은 문자열이나 int 등과 구별되지 않는 것처럼 보입니다. 구현 된 모든 엔티티의 모든 필드에서 동일한 동작을 수행하므로 id 필드도 구현됩니다. 에서

class Organisation extends BaseOrganisation 
{ 

     public function getParentIdAsIntegerOrNullOtherwise() 
     { 
      $an_id = $this->getParentOrganisationId(); 

      if (! is_null($an_id)) 
      { 
       return intval($an_id); 
      } 

      return NULL; 
     } 
    } 

: 다음과 같이 비교 작업에 대한 기록이 null 또는 첫 번째 (ID = 0) 인 경우, 당신은 체크에 대한 사용자 정의 게터를 구현할 수 해결 방법으로

그래서, 컨트롤러 :

$p = $this->organisation->getParentIdAsIntegerOrNullOtherwise(); 

    var_dump($p); 

그것은 덤프

NULL 
어떤 부모 노드에 연결되지 않은 경우이 메시지는 ID = 0

희망

가 알려줘이 도움 요소에 연결되어있는 경우

int(0) 

을 덤프 당신이 그것에 대해 어떻게 생각합니까

+0

안녕하세요 @ 매트 테오, 이걸로 돌아가서 지연에 대한 미안 해요. 내 실수는 결과가 var_dump() 때문에 문자열로 변환되는 null이라는 사실을 알 수 있습니까? 어쨌든 당신의 답은 제가 문제를 해결하는 데 도움이되었습니다. – jdog