2016-12-09 9 views
1

int 유형의 pk로 테이블 whith 'id'를 사용하고 있습니다. 내가 대신 '# 142'for 예에, PHP는 액티브Concat 문자열에 숫자를 반환합니다.

Location_cat::find_by_sql("select concat('#',id) as 'id', text FROM location_cat");

가 0으로'ID를 '반환에 folowing MySQL의 쿼리를하고 있어요합니다.

아무도이 동작을 알고 있습니까?

답변

0

당신은 'ID'필드를 덮어하려고을 연결하기 전에 문자열로 ID를 주조 수 있습니다, 그러나 이것은 당신에게 문제를 제공 할 것입니다. activerecord 객체는 자신의 기본 키 (id-field로 가정)를 알고 있으며 모든 종류의 항목에 사용합니다. 해당 필드에 다른 것을 선택하려고하면이 옵션이 작동하지 않습니다.

예를 들어 ID가 1 인 개체를 가져옵니다.이 개체의 이름은 #1으로 변경됩니다. 이제 AR은 기본 키가 #1 인 개체라고 생각합니다. 어떤 것이 사실이 아님

실제 activerecord 개체로 작업하려면 하단의 id 필드에 다른 것을 넣으면 안됩니다.

데이터를 가져 오는 것일 수도 있지만 $object->id 필드를 반환 할 때 #을 추가 할 수 있습니다. 예를 들어, id에 대한 마술 게터를 만드십시오. (AR이이 getId()의 이름을 지정할 수 있다고 믿지만, 그렇지 않은 경우 __get()에 수정하십시오.

-1

SELECT CONCAT('#', CAST(id AS CHAR(15))) AS nid 
FROM location_cat 
+0

루프를 수행하지 않으므로 "id" 키의 이름을 바꾸려면 다시 한 번 결과를 얻으십시오. 실제로 다른 이름을 지정하면 char로 변환하지 않고도 작동합니다. 이것은 phpactiverecord의 동작이며 everithing은 mysql에서 올바르게 작동합니다. –

관련 문제