2015-01-21 2 views
1

테이블의 비트 필드를 설정하는 데 문제가 있습니다. phalcon이 문자열 ('0')로 바인딩하기 때문에 확인 된 비트 필드를 설정하려는 경우 최종 결과는 확인됩니다. = 1. 모든 비트 필드를 tinyint (1)로 변경할 수는 있지만 많은 테이블에 많은 비트 필드가 있기 때문에 너무 많은 시간이 걸릴 것입니다.phalcon은 비트 필드를 문자열로 처리합니다.

는 phalcon 문서에서 아래 바인딩 타입을 지정하기위한 예있다 :

<?php 

use \Phalcon\Db\Column; 

//Bind parameters 
$parameters = array(
    "name" => "Robotina", 
    "year" => 2008 
); 

//Casting Types 
$types = array(
    "name" => Column::BIND_PARAM_STR, 
    "year" => Column::BIND_PARAM_INT 
); 

// Query robots binding parameters with string placeholders 
$robots = Robots::find(array(
    "name = :name: AND year = :year:", 
    "bind" => $parameters, 
    "bindTypes" => $types 
)); 

하지만이 데이터를 검색한다. 저장 방법으로 데이터를 저장하는 것과 동일한 일을 할 수 있는지 알고 싶습니다. 예를 들어 beforeSave() 메소드에서 metaData를 비트 유형으로 검사하고 이러한 데이터를 Int 값으로 바인드하는 것과 같은 작업을 수행하십시오.

또한 '0'대신 'b0'을 사용하려고했지만 효과가 없습니다.

답변

1

아마도 그 모델의 메타 데이터 구조에

은 주석으로이 부분을 설정하는 가장 쉬운 방법은 다음과 같습니다 http://docs.phalconphp.com/en/latest/reference/models.html#annotations-strategy

class Model extends \Phalcon\Mvc\Model 
{ 

    /** 
    * @Column(type="integer") 
    */ 
    public $bitColumn; 
} 

은 또는 당신

+0

감사 값을 변환하는 beforeValidationOnSave 및 afterFetch을 사용할 수 있습니다 당신은 당신의 대답을 위해서. 나는 이미 주석을 검사했지만 작동하지 않았다. 먼저 @var 정수 주석을 사용했고 대답 후에 @Column (type = "integer")으로 변경했지만 결과는 동일했다. beforeValidation을 사용하는 유일한 방법 일 수 있습니다. 또한 작동하지 않는 경우 데이터베이스 테이블에서 열 유형을 변경하십시오. – Soheil