Não sei se este tópico ainda está atualizado e interessante para alguns de vocês, mas em geral, tive exatamente o mesmo problema.
Decidi que o Gas ORM seria meu mapeador em combinação com o CodeIgniter. Como minha estrutura de banco de dados foi dada e não estava seguindo a convenção table_pk do Gas, tive que definir uma chave estrangeira por mim mesmo, que deve se referir à minha chave estrangeira do banco de dados personalizado. No entanto, a definição disso não teve impacto em nada. Como seu erro acima, o mapeador não conseguiu construir a instrução SQL correta. A declaração ficou parecida com a sua:
SELECT * FROM partner WHERE partner.pool_id IN (1)
Bem, parece que o Gas ignora as chaves estrangeiras autodefinidas e tenta usar a convenção table_pk padrão. Isso significa que ele pega a tabela (no seu caso:pool) e a chave primária (id) mesclando-a com um caractere de sublinhado.
Eu descobri que o construtor de orm.php lida com todas as chaves primárias e estrangeiras definidas nas entidades. Na linha 191, o código chama uma cláusula if combinada com o empty função do php. Como a chave primária é definida sempre e não há negação na instrução, ela pula a parte interna da cláusula todas as vezes. No entanto, a parte interna cuida das chaves estrangeiras autodefinidas.
Para encurtar a história, adicionei uma negação (!) na linha 191 do orm.php que me leva ao seguinte código:
if ( ! empty($this->primary_key))
{
if ( ! empty($this->foreign_key))
{
// Validate foreign keys for consistency naming convention recognizer
$foreign_key = array();
foreach($this->foreign_key as $namespace => $fk)
{
$foreign_key[strtolower($namespace)] = $fk;
}
$this->foreign_key = $foreign_key;
}
else
{
// If so far we didnt have any keys yet,
// then hopefully someone is really follow Gas convention
// while he define his entity relationship (yes, YOU!)
foreach ($this->meta->get('entities') as $name => $entity)
{
if ($entity['type'] == 'belongs_to')
{
$child_name = $entity['child'];
$child_instance = new $child_name;
$child_table = $child_instance->table;
$child_key = $child_instance->primary_key;
$this->foreign_key[strtolower($child_name)] = $child_table.'_'.$child_key;
}
}
}
}
Bem, essa pequena correção me ajudou muito e espero que alguns de vocês possam aproveitar essa dica também.