2014-09-22 4 views
0

Symfony와 Mongo를 사용하고 있습니다. 내 몽고 컬렉션 각각에 대한 문서가 있습니다. 문서에서 나는 모든 필드를 문자열로 정의했는데, 그 중 일부는 일반적으로 숫자 값을 포함하지만.Symfony : 숫자 만 포함하는 문자열은 숫자로 유지되고 쿼리는 실패합니다.

은이 같은 이러한 컬렉션을 검색을 수행하고이를 필터 :

private function like($paramValue) { 
    return new \MongoRegex("/.*" . FilterHelper::castValue(FilterType::INT, $paramValue) . ".*/ix"); 
} 
... 
$qb->field('articleId')->equals($this->like($params['articleCode'])); 

는하지만 값 몽고의 숫자 "article_id": NumberInt(197568)로 유지된다. 이 문서는 다음과 같이 기록됩니다 타입이 예상되지 않기 때문에

/** 
* @MongoDB\String(name="article_id") 
*/ 
protected $articleId; 

은 물론, 쿼리가 실패합니다. 이 문제를 어떻게 해결할 수 있습니까? 나는 $articleId이 숫자라고 추측 할 수 없다.

답변

0

strval php 기능에 대해 생각해 보셨나요? like() 기능에 따라 그것을 통과하고 난 따라 확실하지 않다 반환 값

+0

을 확인하기 전에 물론

$qb->field('articleId')->equals($this->like(strval($params['articleCode']))); 

당신은 strval를 적용해야합니다. Strval은 문자열 값을 반환하지만 몽고는 여전히 숫자 값을 포함하며 필터는 여전히 실패합니다. – ecc

+0

그래서 intval() 함수를 사용하십시오. 어쩌면 나는 그 반대를 이해했다. :) – DonCallisto

+0

음, 대부분의 경우 작동하지만 문제는 Mongo가 숫자 문자열에 대해 숫자 유형을 가정하는 것이지만 때로는 발생하지 않는 숫자가 아닌 문자열에 대해 문자열 유형을 가정하는 것입니다. – ecc