2014-01-23 2 views
0

datamapper orm 및 codeigniter에 문제가 있습니다.배열을 통해 Datamapper ORM 결과 정렬

$names = array('john t', 'alex f', 'martin a'); 

이 지금은이 이름을 가진 모든 사람을 얻으려면 :

나는 사람 이름을 가진 배열이

$persons = new Person(); 
$persons->where_in('name', $names); 
$persons->get(); 

내 질문에 내가 사람이 같은 개체를 정렬 할 수 있습니다 얼마나 내 배열? 사람을 에코하는 경우 정렬은 내 배열과 다릅니다. 내가 아는

예를 $persons->order_by('id DESC');

TY에 대한 열을 order_by하는 방법이있다.

+0

배열별로 정렬 하시겠습니까? 또는 오름차순이나 내림차순과 같은 순서로? –

+0

배열별로 정렬하고 싶습니다. :) 주문하지 않음 –

+0

그럼 코드를 직접 작성해야합니다. 나도 그렇게 생각해. –

답변

0

당신이 MySQL을 경우에 당신은 SQL에서,이에 대한 FIELD() 방법을 사용할 수 있습니다 당신은 포스트 그레스 또는 다른 DBMS에있는 경우

select * from persons where name in ('foo', 'bar', baz') order by field(name, 'bar', 'baz', 'foo'); 

당신은 너무 when의 무리와 함께 case을 사용할 수 있습니다, 몇 가지 아이디어를 참조 here.

그러나 codeigniter의 order_by 메서드 (코드 해독기에서 호출을 전달하는 datamapper)는 매개 변수를 이스케이프 처리하므로 SQL 오류가 발생합니다. 문자열을 순서대로 저장하는 배열을 직접 조작하여 해킹 할 수 있습니다.

// before the ->get(); 
$person->db->ar_orderby[] = "field(name, 'john t', 'alex f', 'martin a')"; 

당신은 여기에 귀하의 의견을 탈출하고 더 이상 프레임 워크에서 더 도움이 없기 때문에 (예 name에) 열 이름과 일치하는 것은 매우 신중해야합니다.