2012-12-14 2 views
0

Codeigniter/Datamapper를 사용하는 응용 프로그램이 있습니다. 의사를위한 테이블과 Specialties를위한 테이블이 있으며 모델은 다 대다 관계로 설정됩니다.Codeigniter/Datamapper가 관계 쿼리를 올바르게 생성하지 않습니다.

나는 전문의에 의해 의사에게 질문하려고하면 모든 의사를 질의하는 것으로 나타났습니다. 누구든지 전에이 문제가 있었습니까?

$s = new Specialty(); 
$s->where('id',$id)->get(); //thought maybe get_by_id($id) was causing the issue, it wasnt... 
$this->out['query'] = $s->doctor->order_by('last_name','asc')->get_sql(); 
$docs = $s->doctor->order_by('id')->get_iterated(); 

$ this-> 아웃 [ '쿼리'] 다음 SQL 쿼리 응답 :

"SELECT * FROM (`doctors`) ORDER BY `doctors`.`last_name` asc" 

또 다른 이상한 일이 결과가 때로 믿을 수 있다는 '여기에 내가 사용하고 코드입니다 t는 last_name에 의해 정렬되지만, 나는 배열이 json_encode 함수에 전달되는 방법에 대해 뭔가를 가정하고있다.

+0

이상하게 충분히,에 문제가 될 것으로 보인다 get_iterated(). 어떤 레코드 세트가 1k 개 이상의 항목을 가지고 있기 때문에 어느 쪽이 싫은가. –

+0

$ s-> doctor-> where ('id', $ id)를 시도해 볼 수 있습니까? $ s-> 대신에 ('id, $ id) -> get(); ? –

+0

$ s-> doctor-> ('id', $ id)는 특수 ID로 한 명의 의사를 찾지 만 전문 ID를 기반으로 한 의사 세트를 검색해야합니다. 이 시점에서 내 가정은 많은 관계 호출에 대해 get_iterated() 메서드가 제대로 작동하지 않는다는 것입니다. –

답변

0

get_sql 메서드에 관련 매개 변수를 사용하고 있기 때문에 일부 매개 변수를 추가해야합니다. docs에서

:

$object->get_sql() 

This method returns the SQL for the currently built query, as if get() was called. It clears the current query immediately. 

Arguments 

$limit: (Optional) Sets the limit on the query. 
$offset: (Optional) Sets the offset on the query. 
$handle_related: (Optional) If TRUE, and this object is referenced from a parent object, the parent object will automatically to the where statement. 


$u = new User(); 
$u->where('name', 'Bob'); 
echo $u->get_sql(); 
// outputs the raw SQL 
Example with relationship 
$group = new Group(1); // load Group #1 

echo $group->user->get_sql(); 
// SELECT `users`.* 
// FROM `users` 

echo $group->user->get_sql(NULL, NULL, TRUE); 
// SELECT `users`.* 
// FROM `users` 
// LEFT OUTER JOIN `groups` groups ON `users`.`group_id` = `groups.id` 
// WHERE `groups`.`id` = 1 

그래서 당신은 출력에 올바른 쿼리를이 작업을 수행 할 필요가 :

$this->out['query'] = $s->doctor->order_by('last_name','asc')->get_sql(NULL, NULL, TRUE); 
관련 문제