2013-05-07 25 views
5

schema.yml Myquan học thuyết trên trường số nguyên trả về chuỗi

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 } 

Một số tổ chức có giá trị số nguyên 0 lưu trữ và không có organisation_id như vậy. Trước sự ngạc nhiên của tôi khi tôi chạy mã này

class organisationActions extends autoOrganisationActions{ 

    public function executeEdit(sfWebRequest $request){ 

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

Kết quả là chuỗi (1) "0"

Tại sao điều này không trả về một số nguyên, vì vậy tôi có thể so sánh === 0

+0

Xin chào @ jdog, bạn sử dụng môi trường và ngăn xếp nào? Phiên bản PHP, sf phiên bản (1.4 tôi giả sử ...), propel hoặc học thuyết? mysql hoặc postgres? Vì vậy, tôi có thể nhân rộng vấn đề của bạn .... – Matteo

+0

Xin chào @ jdog, còn câu trả lời của tôi thì sao? – Matteo

+0

Xin chào @jdog bất kỳ tin tức nào? – Matteo

Trả lời

3

tôi làm một số thử nghiệm và tôi thấy rằng mọi giá trị của một thực thể được trả về thông qua cuộc gọi ma thuật mà lớp cha của mỗi mô hình Thực thể sfDoctrineRecord làm theo phương thức _call. Vì vậy, kiểu trả về của call_user_func_array dường như không khác biệt với chuỗi hoặc int vv. Hành vi tương tự chúng ta có trên mọi lĩnh vực của mọi thực thể được triển khai, trường id cũng vậy.

Vì vậy, như workaround, bạn có thể thực hiện getter tùy chỉnh của bạn để kiểm tra nếu hồ sơ là null hoặc là người đầu tiên (id = 0) để so sánh hoạt động như sau:

class Organisation extends BaseOrganisation 
{ 

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

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

      return NULL; 
     } 
    } 

Trong điều khiển:

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

    var_dump($p); 

Nó sẽ đổ

NULL 

nếu không được liên kết với bất kỳ nút cha

và sẽ đổ

int(0) 

nếu điều này được liên kết với các phần tử với id = 0

Hope trợ giúp này

Hãy cho tôi biết những gì bạn nghĩ về nó

+0

Xin chào @matteo, xin lỗi vì sự chậm trễ trong việc trở lại điều này. Tôi thấy sai lầm của tôi là kết quả là thực sự null, được đúc thành chuỗi, vì var_dump()? trong mọi trường hợp, câu trả lời của bạn đã giúp tôi giải quyết vấn đề. – jdog

Các vấn đề liên quan