2012-12-14 56 views
0

我有一個使用Codeigniter/Datamapper的應用程序。有一張表爲醫生,併爲專業表和模型建立了一個多對多的關係。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(); 

的$這個 - >出[「查詢」]用下面的SQL查詢響應:

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

另一個奇怪的是結果不是活得回到由last_name排序,但我假設它是如何將數組傳遞給json_encode函數。

+0

古怪的是,這似乎是一個問題get_iterated()。這很糟糕,因爲其中一些記錄集有超過1k條目。 –

+0

你可以試試$ s-> doctor-> where('id',$ id);而不是$ s-> where('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);